(#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.
(#15494) Make the puppet parser validate exit non zero when file not found
(maint) rename urpmi spec to be run by default
(#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
(maint) Move constant outside shared_examples_for to avoid "already initialized" warning
(maint) Move common constant/requires for json-schema to spec_helper.rb
(#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
(#21069) refresh the cache of launchd plists on a miss
Merge pull request #1948 from kylog/maint/cleanup-spec-already-initialized-warnings

Maint/cleanup spec already initialized warnings
Merge pull request #1914 from djmitche/bug21069

(#21069) refresh the cache of launchd plists on a miss
(#16384) Make puppet parser validate exit more cleanly

Users running puppet parser validate on a manifest with errors would see the appropriate errors in their manfiest, but would also be told to run "puppet help parser validate" for proper usage of the command indicating they ran it wrong when in fact they had not.  This patch causes puppet parser validate to only display the validation errors and not display the help message during a valid run of this face.
Merge branch 'pull-1925'

This closes GH-1925
(packaging) Update PUPPETVERSION for 3.3.1-rc2
Merge pull request #1926 from jjulien/real_iss15494

(#15494) Make the puppet parser validate exit non zero when file not found
(#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.