(maint) Windows failing spec fixes

 - The usage of Dir.getwd in tests has been simplified to
   File.expand_path to properly handle mixed case CWD
 - util_spec.rb ensures 'FOO' Env var cleared before test starts
 - Windows SID checks should be performed as a regex match to
    properly handle all accounts starting with S-1-5-*, which denotes
    accounts with an identifier authority of SECURITY_NT_AUTHORITY
    instead of hardcoding S-1-5-32-544, the Administrators group
(#22593) Fix interpolation issues in future parser lexer (braces/kw)

The lexer did not honor nested braces inside an interpolation of a
puppet expression. This is bad because it leads to strange errors due to
the lexer telling the parser a lie. the fix ensures that end of
interpolated expression is based on balanced braces.

The interpolation functionality that the first bare word is a variable
is troublesome when wanting to use expressions like if, case, unless,
true false, as they become variable references. This changes the
behavior to interpret these as expression keywords instead of variable
names. Users who insist on using keywords as variable names should if
they need to interpolate $if, use either "$if" or "${$if}".

Test are added to cover these cases.
(maint) rename urpmi spec to be run by default
(maint) Changing rescue of Exception to StandardError

Rescuing exception is in general a bad practice and can cause undesired behaviors.

A detailed discussion about this can be found here: https://github.com/puppetlabs/puppet/pull/1925#discussion_r6529813
(#19955) Give better error msg when Hiera databindings fail.

If a problem occurs while hiera databindings tries to look something
up (bad hiera.yaml, bad data, or indeed bad implementaton), the raised
error ended up as a Puppet::ParseError blaming a manifest with a cryptic
error message.

This changes this to throw a specific error if DataBinding raises an
exception when its find method is called.

It now points to which databinding terminus is in use, what the
exception class and original message was. It then fails the compilation
using a Puppet::Error.

A test is added to ensure a message is produced.
(#22652) Parse query strings in rack w/o rack

Rack does not actually support parsing multiple valued query strings
into an array of values (see https://github.com/rack/rack/pull/519).
This is not going to be supported before rack 2.0, but we need this
behavior in order to not have to deal with YAML query parameters.

This changes the rack based query parameter parsing to use CGI.parse
instead of the built in rack semantics (which also has a large number of
other semantics, which we weren't using). As a note, it does not appear
that the behavior of rack's query parameter parsing is documented
anywhere.
(#22652) Restore rack parsing of POST body parameters

The first pass at the fix for #22652 fixed ignore handling by fixing
support for multi-valued parameters in a GET query_string (i.e. by returning
them as an array); however, it inadvertently broke parsing of parameters
in a POST body, e.g. as found in the catalog endpoint POST.

This patch addresses parameters in either case.  As a footnote however,
note that multi-valued parameters in a POST body (which we don't use) would not
return them as an array.

This patch also adds two specs tests, one to catch the issue in the first pass fix
(POST parameters not parsed), and one to flag the state of POST multi-valued param
parsing (does not return array).
(#22699) set value_collection for boolean params
(#4506) Don't serialize transient vars in Puppet::Resource

When serializing Ruby objects to YAML, Procs may be serialized that
cannot be deserialized. Given the following example:

    YAML.load(YAML.dump lambda { "hi" })

A TypeError is raised with the message "allocator undefined for Proc".

Commit e161cbc introduced a new instance variable to Puppet::Resource,
`@rstype`, which was the serialized resource_type for the given object.
When a Puppet::Resource object was round tripped from YAML the
deserialization would fail with the above TypeError. Using Puppet's
built in deserialization (EG `Puppet::Resource.convert_from('yaml', serialized_data)`)
would work, but directly parsing the YAML would fail.

To resolve this an explicit list of instance variables is specified for
serialization, so instead of trying to serialize everything we only
serialize the things we need.
(#22652) Add be_one_of matcher (copped from pcarlisle)
(#22652) Tighten up spec for multi-valued params in a POST body
Merge pull request #1946 from kylog/ticket/stable/22652-multi-valued-param

(#22652) multi valued parameter support for rack
(packaging) Update PUPPETVERSION for 3.3.1-rc2
Updated the example text of 'puppet module generate puppetlabs-ssh' while personally exploring/learning what functionality 'puppet module generate' provides to users
(#22662) create a logstash_event logger

This pull request implements logdest for puppet runs as using
a structured log format for logstash (json, eventlog, schema can be
found at https://logstash.jira.com/browse/LOGSTASH-675 ).
Merge pull request #1936 from rarruda/logstash_event_log

(#22662) create a logstash_event logger
(Maint) Create spec coverage for parser face

The parser face had no spec test coverage. This creates some coverage
around the code. This coverage replaces what is currently being done in
an acceptance test.
Merge pull request #1955 from zaphod42/maint/master/improve-coverage-of-parser-validate

(Maint) Create spec coverage for parser face
Merge pull request #1939 from adrienthebo/maint-rename_urpmi_spec

(maint) rename urpmi spec to be run by default
Merge pull request #1953 from tchaudhri/update_puppet_face_module_gen_example_doc

(doc) Updated the example text of 'puppet module generate puppetlabs-ssh'.