(#21427) Parse WEBrick multi valued params

We had previously converted to trying to parse the query string
directly, because it looked like WEBrick didn't handle multivalued
parameters. This had the effect of not being able to deal with POST
parameters correctly. After investigating WEBrick some more, it turns
out that it actually does support multivalued parameters, but that is
fairly hidden if you just look at the value returned from #query. The
WEBrick::HTTPRequest#query method actually returns a Hash{String,
FormData}. FormData is a subclass of String and adds a linked list of
Strings, which is used to represent the multiple values. Because it is a
subclass of String, it isn't clear what you are dealing with unless you
specifically look at the class that you have. It also looks like a
string because its #to_s returns the head of the linked list.

This changes the #params method for webrick to understand this structure
and correctly return multivalued parameters as individual strings or an
array of strings.
(#21427) Unescape values when decoding facts

When puppet sends facts to the master it doubly encodes the data
structure. This happens because both the facts_handler encodes that
serialized facts and the http request functionality encodes the value
again for the query string. Although this happens, the compiler, when
deserializing the facts does not decode the data. This is because
decoding was handled by decode_params, although it never should have
been (the underlying library already has decoded the data), which
disguised this problem.

This changes the compiler to unescape the data that it gets to be
symmetric with the fact sending code.
Merge pull request #1739 from zaphod42/issue/master/21427-fix-param-reading-in-webrick

(#21427) Properly deal with facts again