(maint) Correct ssl/puppet_cert_generate_and_autosign test to do what it says it's doing.

Prior to this commit, the test was incorrectly specifying autosign=false
when attempting to test the behavior when autosign is true. This looks
like a simple copy-paste error as the test right above is exactly the
same. This commit correctly specifies the autosign value.
(PUP-1177) allow parsedfile providers to choose a default mode

The ParsedFile provider baseclass and its companion Util::FileType module
employ Tempfile for pre-buffering generated files. If there is no actual
file at the final desination yet, copying the tempfile will preserve its
permissions, which implies a mode of 0600.

This is not desirable for all files managed by ParsedFile providers. Therefor,
the ParsedFile provider baseclass now provides an interface to change this
default mode by overriding a method.
(maint) move the file mode tests to the files spec module

It is helpful to have a simple helper method to match desired file modes
from spec tests.
(PUP-1177) make sure ssh_known_hosts is not created with mode 0600

The default mode for files that a ParsedFile provider newly creates
is 0600. This makes no sense for the ssh_known_hosts file, because it
contains public information that adds to security for all users.
(PUP-1177) update ParsedFile provider unit tests

The constructor for the :flat filetype accepts a second argument now.
This second argument must be taken into account when stubbing specific
invocations.
(PUP-1177) restore :ram FileType compatibility

The :ram filetype, as an alternative to :flat, is often used for spectests
of ParsedFile providers. The providers normally use the :flat type, but through
mocking, are made to use :ram in test context. Since the providers often pass
both supported arguments to the :flat constructor, it must be accepted by the
constructor of the :ram type as well.
(PUP-2079) Add no-op PMT generate template format.

Prior to this commit, the mechanisms available for writing skeletons containing ERB templates
were awkward at best (and broken at worst).

This change adds a new template extension for module skeletons that has the (somewhat counter-
intuitive, when described this way) behavior of performing no alterations to the given template.
In this way, one could place a file like `foo_bar.erb.template` in their module skeleton, and
generated modules would contain a file named `foo_bar.erb` with the exact contents of the
`.template` file.

This will also close pull requests #2468 and #2688.
(PUP-2833) Make all types inherit PAnyType

Some types inherited PAbstractType (to indicate they where not
concrete). This just causes confusion when using the Ruby API
to check if a Type is PAnyType.

This makes all types inherit from PAnyType (which is the only
type inheriting from PAbstractType).
(PUP-2794) Change Callable to mean "can be called with"

It is more meaningful to check that a Callable can be called with
certain types (exact or more generic) than to check the reverse.

This alters the meaning of Callable assignability so that a more generic
Callable is accepted. While this seems counterintuitive from the
perspective of the type system, it is the constraint that is expected as
the constraint being expressed means "Must be callable with arguments of
these types", and a more generic callable is just that.

The current implementation got that wrong, and will actually accept
callables that can in fact not be called.

This also alters the assert_type function that declared that it would
call a given block with Any, Any, when in fact it will call with
Type, Type.

Note, that a function that after this delares that it calls
Callable[Any] will enforce that the given callable is Any. If the intent
is to accept any callable, the type should be given as just Callable.
(PUP-480) Put the nail in :undef's coffin

This changes the evaluation of a LiteralUndef to nil from :undef.
As a consequence, there were minor adjustments needed to the Closure's
call_by_name support to get the correct semantics for "missing"
parameters.

Tests are also added to ensure that :undef does not sneak into arrays or
hashes in the 4x function API.

This commit contains a cheat for epp and inline_epp functions as they
need to receive their arguments without transformation. When that is
fixed (PUP-2845) the cheat in runtime3_support#call_function() should be
removed.

:undef is still used in the "puppet/pops" section of the code (mainly
for reasons of transforming to 3x, and if :undef symbols leak from 3x.)
(PUP-480) Change name to assert_no_undef

Changes the name of die_undef_die test assertion function to
assert_no_undef.
(PUP-480) Remove :undef use in slice function

The use of :undef is now replaced with nil, and mentioned as undef
instead of :undef in the documentation.
(PUP-480) Change use of :undefined to :unspecified to avoid confusion

The use of this symbol in e4_parser_adapter has nothing to do with
:undef / nil, it is an internal state (what to parser file content
or content of string).
(PUP-480) Fix Resource.to_hash to also filter nil values

Resource.to_hash currently filters on :undef only. Now it also
filters out parameters that have an explicit nil value set.
(PUP-480) Change Scope.to_hash not not include nil values

This makes scope equate :undef and nil when asked to produce a hash
of values.
(PUP-480) Make injector lambda calls use nil instead of :undef
(PUP-480) Remove use of :undef in producers

Producers, when evaluating puppet logic always do it the 4x way
and do not need to translate nil to :undef.
(PUP-480) Modify lookup function to not pass :undef to puppet evaluation

Since the evaluation of puppet logic in the binder is always done
with the 4x evaluator, there is no need to transform nil to :undef.
owever since 3x *may* call with :undef these should be translated to
nil.
(PUP-480) Change AccessOperator to not consider :undef from evaluator

This changes the AccessOperator logic to not consider :undef being
prouced by the evaluator (as key). It continues to support a hash with a
value stored under the key :undef and making that return that
value is accessed as $hsh[undef]. It is expected that hashes
follow the 4x convention (nil), but this attempts to also work
if the hash was constructed with 3x logic and uses :undef instead of
nil. (nil has priority if there is both a nil and a :undef key in
the same hash)
(PUP-480) Clarify why nil and :undef are both supported