(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
(PUP-480) Remove stale comments
(PUP-480) Change -= eval to assign nil instead of :undef for no result
(PUP-480) Add comments to clarify use of :undef
Merge pull request #2814 from hlindberg/PUP-480_die_undef_die

(PUP-480) Put the nail in :undef's coffin