(maint) Serialize timestamp in Puppet::Node::Fact using iso8601
(maint) Split to_pson_data_hash into generic to_data_hash component

Split out the parts generating a hash of the object itself from adding
document_type metadata.

Also split out for all resources that generated the hash directly inside
the to_pson method.
(#22849) Add msgpack serialization format

Use a feature to check for existence of msgpack library and add the
serialization format if it is supported.
(#22849) Add to_msgpack on format_support and require where needed

Add to_msgpack back to serializable objects. They all have the same
implementation. The issue is nested objects; if an object with no msgpack
implementation is contained in the "data hash" then msgpack will try to call
to_msgpack on it. The alternative is to make sure there are only nested
hashes, but this is not backwards compatible with the pson formats.

Also strips out the internal fact _timestamp from the node object as
that is of type Time and cannot be serialized.
(#22849) Move Confine out of Provider

Having Confine inside the Provider namespace was causing dependency
cycles that made it impossible to add msgpack support properly
(maint) Stub Confine at old location

Provide backwards compatibility for code including the old confine
location inside provider.
(maint) Fix type and mark as abstract

The `to_data_hash` method had a typo in its docs and wasn't marked as
abstract. The enclosing class also needed to be marked as public so that
the documentation is accessible.
Merge branch 'dalen-msgpack'

* dalen-msgpack:
  (maint) Fix type and mark as abstract
  (maint) Stub Confine at old location
  (#22849) Move Confine out of Provider
  (#22849) Add to_msgpack on format_support and require where needed
  (#22849) Add msgpack serialization format
  (maint) Split to_pson_data_hash into generic to_data_hash component
  (maint) Serialize timestamp in Puppet::Node::Fact using iso8601

Closes GH-1850