(maint) Add optional_parameter_count method to Closure

Add a method to return number of optional parameters on
Puppet::Pops::Evaluator::Closure just like Puppet::Parser::AST::Lambda
has.
(PUP-1066) Add the ability to delete files.
Add a .destory and .destroy? in order to flag files for deletion.
We also sneak in a .entries reader in order to let us read the
entries directly.

This should fix PUP-1066 and #12687.
(maint) Fix syntax error in example code
(maint) Change name from from_pson to from_data_hash

This is because these methods are also used for deserialization from
other formats than PSON. The method for serializing a object is called
to_data_hash, so makes sense to call this from_data_hash.
(maint) Deprecate from_pson methods

They have all been replaced with from_data_hash methods instead.
(maint) Unify to_pson in FormatSupport module, just like with to_msgpack

This removes all unnecessary to_pson definitions and creates a common
one in the Puppet::Network::FormatSupport module instead just like with
to_msgpack.

There are still some to_pson definitions left but that is because they
also add a document type structure. That cannot be removed until the
next major version as it would change the on wire format.
(maint) Simplify msgpack format code
(PUP-1029) Add Enumeration - common place to produce an Enumerator.

The support for creating an Enumerator was in different places
(in each of the iterative functions, and in the type calculator).

This commit break out the behavior to a common class; Enumeration.
(PUP-1029) Make filter function use common Enumeration support.

This makes the filter function use the common Enumeration support
and makes it consistent with how all iterative functions should behave.

The function's documentation is also updated.
(PUP-1029) Make map function use common Enumeration support.

This makes the map function use the common Enumeration support.
(PUP-1029) Make each function use the Enumeration support.

This makes the each function use the common Enumeration support.
Documentation is also updated.
(PUP-1029) Make reduce functon use common Enumeration support.

This makes the reduce function use the common Enumeration support.
Documentation is updated.
Merge pull request #2310 from dalen/serialization_revamp

Serialization revamp
(PUP-1588) Add msgpack indirector terminii

Adds indirector terminii for catalog, report and node. These are a lot
faster to store than the PSON or YAML equivalents.
(maint) Make msgpack feature do the correct requires
Merge pull request #2330 from dalen/maint_application_comment

(maint) Fix syntax error in example code
(doc) Point to the local docs

Rather than pointing to some remote form of the docs that are part of
the repo, we should point to the local files. This makes the docs more
self contained and better versioned together.
(PUP-1451) Make SSL file permissions a bit more relaxed for public files
(PUP-1120) Make modes of public ssl directories explicit

Previously, the mode of the `certs`, `public_keys`, and
`certificate_requests` directories within the `ssl` directory was
unspecified. This means the actual mode depended on the umask of the
user that started puppet, and caused those directories to be created.

Since the information in these directories is intended to be public,
there is no harm in making the mode explicit 0755. This also matches
what I see when installing puppet from packages.
(PUP-1120) Be explicit about group for ssl directory

Previously, files and directories contained with the `ssl` directory
were inconsistent with respect to their `group`. For example, the
`certs` directory had group `root`, but files within it,
e.g. hostname.pem, had group `service`.

Commit c6846c2b updated the `hostprivkey` and `privatekeydir` settings
so that they are readable by the `service` group. This commit makes
the `service` group explicit for other files & directories in the
`ssl` directory.