(#8410) Factor out a base class for exec providers
Rather than the shell provider inheriting from the posix provider, they
both now inherit from a common Puppet::Provider::Exec class. This new
base class and inheritance structure will allow the forthcoming windows
provider to also inherit from that class, rather than from the
unsuitable posix provider.
Also, now that Puppet::Util.execute supports commands as strings in
addition to arrays, the command to execute is passed to
Puppet::Util::SUIDManager.run_and_capture as a string, rather than a
string wrapped in an array. This ensures we will never improperly quote
a command with arguments provided as a single string.