(#21427) Make report format selectable

Without making agents able to select the format to serialize reports, a
newer agent would be unable to submit reports to an older master.
Although we ask users to upgrade masters first, that is not often done
in practice. In order to allow those kinds of setups to work, this makes
the report format selectable.

Puppet 3.2.2 and later support reports as pson, so only older, insecure
masters need to have the agent's change this new setting.
(#21427) Handle loss of precision during YAML serialization

Previously, when round-tripping a report using YAML, the
Puppet::Resource::Status#time object could lose precision (depending on
the ruby version and platform), so it did not match the expected value. For
example, the expected value was:

    "time"=>"2013-09-04T17:01:38.510604415+00:00"

But the round-tripped value was:

    "time"=>"2013-09-04T17:01:38.510604000+00:00"

This commit changes the test to explicitly compare status fields, and
handles the `time` field specially to avoid loss of precision during
YAML serialization.
Merge branch 'issue/stable/21427-select-report-serialization-format' into stable

* issue/stable/21427-select-report-serialization-format:
  (#21427) Handle loss of precision during YAML serialization
  (#21427) Make report format selectable