(#14598) Add SSL support for forge interaction

This patch turn on SSL support when an HTTPS url is provided, and also changes
the default URL to https://forge.puppetlabs.com so that now all interaction is
done via SSL.

As not all Ruby setups on weird operating systems are proven to work, effort
was spent in making sure validation errors are captured and returned as a
meaningful error to the user. This was also captured as a simple acceptance
test by testing against a self-signed certificate (in our case, a puppet
master).

The forge error handling in Puppet::Forge::Repository was changed to return
a new set of exceptions specific to the Puppet::Forge API set, so they can
be captured by consumers and displayed. This also helps a lot with test mocking
and tests have been changed accordingly.

To reflect the new error handling in Puppet::Forge::Repository the search face
was changed to capture exceptions and hand them off to the rendering parts as
data in a hash, to mimic how the rest of the puppet/face/module components
work.

All the existing acceptance tests were changed to now test against SSL, and
existing unit tests were also changed to reflect changes herein. New tests were
added for Puppet::ModuleTool::Applications::Searcher as previously this had no
coverage.
(#15320) pmt generate generated _gitignore instead of .gitignore

So the file stored in the main skeleton was _gitignore. Previously the code
specified a rewrite from an underscore to a dot, but alas this did not work in
ruby 1.8.7.

I'm removing that code for now, and renaming the file to .gitignore. I can see
why people might want the rename behaviour, but this has no tests and doesn't
work on ruby 1.8.7. For now to get the gitignore working I've reverted this
behaviour introduced in 94808b89eb27d13c5910ac5c6704e056d6cd46d5.
Merge branch 'maint/3.0rc/do_not_show_symbols_to_users' into 3.0rc

* maint/3.0rc/do_not_show_symbols_to_users:
  (Maint) Fix Could not find Puppet Face :foo
Use in memory sqlite database for unit tests
Stub pkginfo when installing in openbsd spec
Stub sleep in runit provider test

The runit provider now sleeps for 5 seconds during the start method. Stub this
in unit tests for a 5 second speedup.
Fix assignment in argument in metatype
Store into $LOADED_FEATURES with .rb extension
Cleanup unnecessary code in environment
Refactor module to require path and environment args
Merge branch 'environment-performance' into 3.0rc

* environment-performance:
  Refactor module to require path and environment args
  Cleanup unnecessary code in environment
  Store into $LOADED_FEATURES with .rb extension
  Fix assignment in argument in metatype
Only cache module_directories once settings are initialized

Calling module_directories before settings are initialized (and therefore
before the modulepath is known) returns an empty array. We probably don't want
to cache this, and it might interfere with loading from the modulepath once it
is initialized.
Merge pull request #905 from pcarlisle/maint/3.0rc/modulepath-cache-before-initialized

Maint/3.0rc/modulepath cache before initialized
Merge pull request #901 from kbarber/ticket/3.0rc/15320-bad_gitignore_for_pmt_generate

Ticket/3.0rc/15320 bad gitignore for pmt generate
Merge pull request #891 from kbarber/ticket/3.0rc/14598-interact_with_the_forge_using_ssl

Ticket/3.0rc/14598 interact with the forge using ssl
(#15307) Fix puppet help when a face throws an exception

Without this patch applied the `puppet help` command displays nothing
but an exception when a 3rd party face throws an exception during the
loading process.

For example:

    Error: Could not autoload puppet/face/node/classify: no such file to load -- fog
    Error: Could not autoload puppet/face/node: Could not autoload puppet/face/node/classify: no such file to load -- fog
    Error: Failed to load face node:
    Error: Could not find version current of node
    Error: Try 'puppet help help help' for usage

This is a problem because `puppet help` should be robust and provide helpful
information in all cases.

This patch fixes the problem by catching loading errors when building the list
of available face subcommands and their summaries.  If an exception is caught,
it is handled by marking that face subcommand and presenting a message
indicating the face is unavailable in the help output.

This looks like:

    Usage: puppet <subcommand> [options] <action> [options]

    Available subcommands:

      agent             The puppet agent daemon
      apply             Apply Puppet manifests locally
      ca                Local Puppet Certificate Authority management.
      catalog           Compile, save, view, and convert catalogs.
      cert              Manage certificates and requests
      certificate       Provide access to the CA for certificate management.
      certificate_request  Manage certificate requests.
      certificate_revocation_list  Manage the list of revoked certificates.
      config            Interact with Puppet's configuration options.
      describe          Display help about resource types
      device            Manage remote network devices
      doc               Generate Puppet documentation and references
      facts             Retrieve and store facts.
      file              Retrieve and store files in a filebucket
      filebucket        Store and retrieve files in a filebucket
      help              Display Puppet help.
      inspect           Send an inspection report
      instrumentation_data  Manage instrumentation listener accumulated data.
      instrumentation_listener  Manage instrumentation listeners.
      instrumentation_probe  Manage instrumentation probes.
      key               Create, save, and remove certificate keys.
      kick              Remotely control puppet agent
      man               Display Puppet manual pages.
      master            The puppet master daemon
      module            Creates, installs and searches for modules on the Puppet Forge.
      ! node            ! Subcommand unavailable due to error. Check error logs.
      ! node_aws        ! Subcommand unavailable due to error. Check error logs.
      ! node_vmware     ! Subcommand unavailable due to error. Check error logs.
      parser            Interact directly with the parser.
      plugin            Interact with the Puppet plugin system.
      queue             Queuing daemon for asynchronous storeconfigs
      report            Create, display, and submit reports.
      resource          The resource abstraction layer shell
      resource_type     View classes, defined resource types, and nodes from all manifests.
      secret_agent      Mimics puppet agent.
      status            View puppet server status.

    See 'puppet help <subcommand> <action>' for help on a specific subcommand action.
    See 'puppet help <subcommand>' for help on a specific subcommand.
    Puppet v3.0.0

This patch also contains two squashed commits from Andy Parker

 * Cleaned up help action by extracting methods
 * Split apart things to stop mingling concerns