(#15202) Make puppet module install create parent directories

Without this patch, the puppet module install command will fail when run
as a normal user account without a ~/.puppet directory.

The error is:

    $ puppet module install puppetlabs-cloud_provisioner
    Preparing to install into /Users/jeff/.puppet/modules ...
    Error: Could not install module 'puppetlabs-cloud_provisioner' (latest)
      Directory /Users/jeff/.puppet/modules does not exist

This is a problem because it adds friction to the process of getting started
with Puppet.

This patch fixes the problem by creating the directory if the path does not
already exist.  If the path does exist, then the error is still thrown, but has
been modified slightly to provide helpful next actions.  The error when the
path exists as a non-directory looks like:

    Error: Could not install module 'puppetlabs-cloud_provisioner' (latest)
      The reason is path '/Users/jeff/.puppet/modules' is not a directory.
      A potential solution is `mkdir -p '/Users/jeff/.puppet/modules'`.

This patch also handles the situation where the target path does not exist but
the effective uid of the puppet process does not have access to create the
directory.  The error message in this case looks like:

    Error: Could not install module 'puppetlabs-cloud_provisioner' (latest)
      Permission is denied when trying to create directory '/Users/jeff/.puppet/modules'.
      A potential solution is to check the ownership and permissions of parent directories.
(#15202) Fix acceptance tests for creating non-existance directories

The acceptance tests were failing after we added the new functionality
for creating dependent directories during module installation.

This patch fixes that, by remedying the tests to make this situation
acceptable instead of expecting an error and a non-zero exit code.
Remove confdir and vardir from run_mode

Prior to this commit, the vardir and confdir settings
were tied to run_mode.  This caused a chicken-and-egg
problem where you could not initialize the confdir
and vardir until you'd loaded the application/subcommand,
because that is the first point in time where you'd know
the run_mode.  However, without knowing the confdir/vardir
ahead of time, it's impossible to know where all you might
need to look to try to find the application/subcommand for
loading.

This commit decouples those settings from run_mode.  The
default values for them are now set solely based on whether
the user is root or not.  Individual applications may
override these defaults a bit later in the lifecycle
(e.g., 'master' does this).
Make autoloader consider modulepath lib dirs when loading a file
Use autoloader in application / command line methods

There were a few places where we were loading things
directly from the LOAD_PATH, rather than going through
the autoloader; now that we are considering having
the modulepath lib dirs eligible for loading from,
it is important that we handle all of this in a single,
central spot in the code.  Thus this commit changes
the command_line/application/face_collection classes
to use the autoloader rather than trying to manage
things themselves.
Add support for gem dependency list in Modulefile

This commit adds support for a "gems" line in a
puppet modulefile.  If the line exists, then the
module tool will use a puppet package provider
to attempt to install all of the gems that are
prerequisites of the module.

This commit is functional but is really only
for illustration purposes; it has no tests and
is lacking a lot of important error handling...
it's basically just a proof-of-concept.