(PUP-2240) Add unfold of array using splat unary * operator

This adds the ability to unfold values into individual parameters
and entries in lists the same way as this is done in Ruby.
(PUP-2240) Fix failing test (hash order ruby 1.8.7)
(maint) Remove calls to removed function

On master, the extra check if a function was available before evaluating
arguments was removed. The rebased code still had this call.
(PUP-2287) Fix lambda param with default is always choosen

This fixes the problem that a lambda parameter with a default always
was choosen even if a value was given for the parameter.

The expected behavior for function calls is that only truly missing (non
given) arguments are subjects to default value replacement, not if a
value is nil or undef. (This because functions are call by position, and
not call by name as for defines and classes). Thus all nil/undef values
are treated as any other value.

One test for the map function relied on the now fixed bug and it has
been marked pending, as it should be updated once the map function has
been transitioned to the new function API. (Where undef is not
transformed to empty string).
(maint) Update test using old style initialization of loaders

The API for creating loaders was changed (now requiring an environment).
This updates the logic that used the old API.
(PUP-2369) Add class to the message we return.

Add the class of the values we're changing from and to in the message
that's being returned. At the very least this will give developers a
hint about the types they're comparing explaining possible weird
behaviour.
(doc) Improve description of certname setting

This commit mentions our recommendations for certname values, as well as the one
reserved certname of `ca`. It also adds some context about what the certname is
used for.
(doc) Improve description of recurse, recurselimit, and purge attributes

The file type's `recurse` attribute didn't really explain what it did, and
didn't accurately describe the difference between `true` and `remote`. This
commit clears that all up.
(doc) Exec type: Clarify that onlyif/unless use exit codes, not stdout

This commit also clarifies that they use the same provider as the main command.
(PUP-2240) Refactor unfold behavior into common method

A private evaluator method called unfold is added to handle
the case of iterating and evaluating an array of expressions where
an UnfoldExpressionExpressions should be unfolded/expanded in-line.

This new method is then used in the places where unfold behavior
is supported.
(PUP-2287) Remove dead code paths, fix stale comments
Merge pull request #2532 from hlindberg/pup-2240_unfold-array

(PUP-2240) Add unfold of array using splat unary * operator
Merge pull request #2588 from hlindberg/pup-2287_lambda-default-always-ovrrides

(PUP-2287) Fix lambda param with default is always choosen
(PUP-2288) Make [ be LISTSTART if first in file or preceded by WS

The problem was that there was only one special case being handled
by the lexer to dis-ambiguate if an expression followed by [ meant
the start of an access operations (e.g. getting an entry out of an
array), or if it represented the start of a literal array.

The supported special case was NAME followed by non-WS followed by [.

This meant that cases like foo(3) [a,b,c] were always treated as
an access operation. 

The fix generalizes the dis-ambiguation so that all access operations
must be written without interleaved WS.
Merge pull request #2542 from hlindberg/pup-2288_list-start-unless-ws

(PUP-2288) Make [ be liststart if first in file or preceded by WS
(PUP-1736) Log Application runtime information

Add a debug message to the startup sequence of Puppet applications that
contains information about the runtime environment. Currently the following
pieces of information are logged:

  - Puppet Version
  - Ruby Version
  - Puppet Application Run Mode
  - Runtime locale if Ruby Version >= 1.9.3
(doc) issue warnings to certificate does't match

issue warnings when certificate between master and agent doesn't match.
At the moment the message says to execute rm -r certificate but it doesn't solve the problem, need to erase the private key too.
This code shows the right command to execute.
to test this erase your certificate and key from the agent using the command below and try use puppet agent -t again.
find $(puppet master --configprint ssldir) `facter fqdn`.pem -delete
(doc) more specific warning for certificate matching issues

This adds a bit more information on commands to run, in particular with
the addition of how to delete the cert on windows agents.
Merge pull request #2589 from daenney/add-ensure-type-logging

(PUP-2369) Add class to the message we return.
Merge branch 'patch-1'

* patch-1:
  (doc) more specific warning for certificate matching issues
  (doc) issue warnings to certificate does't match