(PUP-753) Benchmark puppet compiling w/many modules

This sets up a scenario in which we are benchmarking the puppet compiler
with a large number of modules, but very simple manifests. The generated
modules have 2 manifests each an public and an internal. The site.pp for
the environment simply includes all of the modules' public classes. The
public classes in turn include their own internal class. The internal
class then places a single "notify" resource in the catalog.

This also ends up laying down a general structure for benchmark
scenarios. Each scenario has support files under `bencmarks/<name of
scenario>` and has a rake namespace under the `benchmark` namespace.
Each namespace should have at least tasks for `generate` and `run`.
(PUP-753) Profile the many_modules benchmark scenario

This adds a new rake task "benchmark:many_modules:profile" that will run
a single case of the many_modules benchmark and profile it using
ruby-prof. The profile data is written to a file in the PWD that can
then be viewed using kcachegrind (or qcachegrind on OSX).
(PUP-753) Extract benchmark impl into file

The code for setting up and running the benchmark is very specific to
this particular scenario and also too large to keep in a rake file. This
extracts it out into a file that lives inside the scenario. This should
turn into a common interface that all benchmark scenarios can implement
and should allow the maintenance of scenarios to remain separated and
the creation of new ones to be vastly simplified.
(PUP-753) Generate scenario tasks from filesystem

Since the scenario execution is just defined by a ruby class that lives
in the scenario directory, the scenario tasks can now be generated. This
extracts the description of a scenario into a file (`description`) and
generates a set of rake tasks for each scenario that is in the
benchmarks directory.

This also removes the top-level benchmark task because right now all
scenarios will be using the same class name (Benchmarker), which would
cause name collisions when there are multiple scenarios being run in the
process.
(PUP-753) Include a minimal metadata in each module

This includes a basic, minimal metadata in each of the generated
modules. There is just enough information in the metadata.json file to
cause the module to be accepted by puppet as a valid and usable module.
(Maint) Remove unused dependencies

There were a few require statements that got left behind when the
benchmark implementation was moved from the rake tasks to its own
file. There was also a vestige of an attempt at using Open3 for
executing some commands. This removes those unneeded require statements.
(PUP-753) Use correct format constant on 1.8.7

The constant for the default format string changed between 1.8.7 and
1.9.3. This adds a check for the ruby version so that it can get the
correct constant.
(PUP-753) Remove duplicate calls to setup

There were two different places calling setup for the benchmarker. This
consolidates it down to one. Unfortunately, the setup method depends on
the generate method having been run already and so it not analogous to
the `setup` task. This meant that setup is actually called in the
`generate` task.
(PUP-1559) Ensure ADSI Group SIDs may be looked up

 - Previously, calling Puppet::Util::ADSI::Group.exists? for a
   well-known group SID would return false, because the WinNT:// style
   URI used to find the group would not examine / lookup the SID, but
   would instead create a broken Uri that the underlying OS could not
   understand
 - Now, the given group name is checked to see if it's a SID before the
   Uri is constructed, and a SID style Uri is created where appropriate

   Paired-with: Joshua Partlow <jpartlow@puppetlabs.com>
Merge pull request #2317 from Iristyle/ticket/master/PUP-1559-adsi-well-known-sids

(PUP-1559) Ensure ADSI Group SIDs may be looked up
(PUP-1409) add authorityKeyIdentifier to client certificates

As discussed in the ticket this will add the authorityKeyIdentifier that
is not required, but recommended to add to certs signed by a CA
conforming to RFC 5280. This extension takes the subjectKeyIdentifier of
the CA certificate and adds it as keyid to authorityKeyIdentifier.  This
PR also adds a test to make sure the extension is correctly added to the
resulting certificate.
Merge branch 'issue/master/PUP1387_authorityKeyIdentifier'

* issue/master/PUP1387_authorityKeyIdentifier:
  (PUP-1409) add authorityKeyIdentifier to client certificates

Closes GH-2243
(maint) Switch from -fd to -fp for specs to reduce disk space usage
(PUP-753) Use an earlier version of ruby-prof on 1.8.7

ruby-prof > 0.13.1 requires Ruby 1.9.3 or greater, but we can install
from the 0.13.x line for Ruby 1.8.7 compatibility.

Could not use two platforms commands here because you can't duplicate
gem calls for the same gem.
Merge pull request #2329 from zaphod42/feature/master/pup-753-generate-benchmarking-manifests

(PUP-753) Benchmark puppet compiling w/many modules
Merge branch 'master' of https://github.com/puppetlabs/puppet