(maint) Allow arrays, bools, and numerics to be frozen
(maint) Detect reparse when :code changes

Previously the detection for reparse didn't take into account the
parsing having been done from the Puppet[:code] setting. This meant that
if a test tried to compile several different manifests for the same node
it would only ever compile from the first value of Puppet[:code] and
subsequently reuse that for all other calls (even if Puppet[:code]
changed).

This adds a check for changes to Puppet[:code] to cause it to
re-calculate known_resource_types.
(PUP-542) Test the gamut of mutation

There are a lot of ways that the facts hash could be mutated. This
checks that none of those ways can happen.
Merge branch 'adrienthebo-issue/master/pup-542-deep_freeze_arrays_numerics_booleans'

* adrienthebo-issue/master/pup-542-deep_freeze_arrays_numerics_booleans:
  (PUP-542) Test the gamut of mutation
  (maint) Detect reparse when :code changes
  (maint) Allow arrays, bools, and numerics to be frozen