fix regular expression in ClassGen#is_constant_defined?
(PUP-753) Write a JMeter CSV log

This adds a JMeter format CSV log of the benchmark runs. This log will
allow us to track the performance over time via Jenkins and the
Performance plugin.
Merge pull request #2335 from ptomulik/fix/classgen_regexp

fix regular expression in ClassGen#is_constant_defined?
(PUP-753) Add task to run/profile all scenarios

In order to make it easy to bulk collect the benchmark data there needs
to be a single command to run all of the scenarios. This adds
`benchmark:all:run` and `benchmark:all:profile` to achieve this.
(PUP-753) Write times in millis

The JMeter format is to use milliseconds to express time. This changes
the timestamp and elapsed time to be in millis.
(PUP-753) Benchmark system startup

This adds a simple benchmark to check how long it takes to get puppet to
respond to commands on the CLI. This is an important aspect of percieved
performance for many users. And for anyone trying to script puppet
commands, this becomes a *very* important aspect of actual system
performance.
Merge pull request #2338 from zaphod42/feature/master/pup-753-record-benchmark-times

(PUP-753) Write a JMeter CSV log
(PUP-1407) Rewrite certificate_revocation_list test to use a temporary CA instead of mocks
(PUP-1407) Verify that CRL times are within expected ranges

Modifies the test so that we verify the CRL last and next update times are
in UTC time (per the RFC) and that the number of seconds since the epoch
are within 5 minutes (plus or minus) of the expected value.

Also modifies the test to use public APIs to access the CA cert and
private key.
(PUP-1407) Add authorityKeyIdentifier to CRL to make the CA conform to RFC5280

RFC5280 requires CRLs to contain the authorityKeyIdentifier extension[1].
It identifies the public key that corresponds to the private key used to
sign the CRL.

RFC5280 also requires the use of the key identifier method. This
implementation uses the key identifier format described in OpenSSL[2].
In particular, the `always` value is used to require that the extension
is present.

Also note that we need to invoke the `add_extension` method instead of
overwriting the extensions.

[1] http://tools.ietf.org/html/rfc5280#section-5.2.1
[2] http://www.openssl.org/docs/apps/x509v3_config.html#Authority_Key_Identifier_
(PUP-1407) Verify extensions are still present after revocation

Previously, we were only testing that the crlNumber and authorityKeyIdentifier
extensions were present when a CRL is generated, but not when it is revoked.

This adds helpers for testing the extensions and updates both cases to use them.
It also is more explicit in verifying that the authorityKeyIdentifier extension
has the same value as the subjectKeyIdentifier from the issuing CA cert.
(PUP-1407) Actually test deserialization and CRLReasons

Previously, the test was stubbing everything about how CRL
deserialization worked to the point that `from_s('my crl')` was passing
when it shouldn't. The from_s method expects a PEM encoded string.

This commit actually tests deserialization, and adds tests to ensure the
CRL contains CRLReason entry with valid reason codes.
Merge branch 'pr/2238'

* pr/2238:
  (PUP-1407) Actually test deserialization and CRLReasons
  (PUP-1407) Verify extensions are still present after revocation
  (PUP-1407) Add authorityKeyIdentifier to CRL to make the CA conform to RFC5280
  (PUP-1407) Verify that CRL times are within expected ranges
  (PUP-1407) Rewrite certificate_revocation_list test to use a temporary CA instead of mocks

Closes GH-2238
(PUP-1407) Fix specs on 187

In ruby 1.8.7, OpenSSL::X509::Name does not include Comparable, so `==` is
not based on the `<=>` operator. As a result, comparing two Name objects
that have the same string representation will return false. In ruby 1.9,
the class includes the Comparable module. Changed the test to just compare
the String representations.

The other test was failing for me on ruby 187, and it seemed completely
unnecessary to compute 2**158 every time the test runs.
(docs) Update description for Exec type's logoutput parameter

The logoutput parameter can't accept log levels as legal values. This has been
wrong since 2008 (commit bb8051bc406d1da67db8212e852bb36d1368e953) and it sounds
like it was practically wrong long before that.
Merge pull request #2343 from nfagerlund/docs_exec_logoutput

(docs) Update description for Exec type's logoutput parameter
(PUP-1473) Fix issue with UTF-8 in user comments

GH-1943 included a change to munge the comment property on the user
type so that it gets encoded as ASCII-8BIT. This was to allow the comment
property to handle UTF-8 values as existing values are read as ASCII-8BIT.

Originally the change called `force_encoding` to force the encoding to
ASCII-8BIT. This method does not actually attempt to encode the string, it
only changes the string's associated encoding. It was suggested during code
review that a call to `encode` should be used instead. However, calling
`encode` will fail if the string has UTF-8 characters that cannot be
represented in ASCII-8BIT.

As we desire the comment property to be treated as a squence of bytes in
this case, we should be calling `force_encoding` instead of `encode`.
(PUP-1619) Add first impl of working Tuple Type

This adds the Tuple Type which is parameterized with a sequence
of types. The parameters also includes the ability to specify a range
of occurrences of the last type in the sequence (default 1).

This also makes a small refactor of type equality since Tuple and
Array may describe exactly the same type of instance, but it is
neither's responsibility to know this - hence, equality of types
is now performed by the TypeCalculator.

This commit also contains the model part of the PStructType
implementation.
(PUP-1619) Fix problem with parsing Tuple

There was a problem parsing the occurence constraint for the
last type argument (if there was one numeric).

This also adds a test.
(maint) Add Array type size constraint test

A test for Array[T, from, to] was missing.