(maint) Fix Pattern / Variant Type assignability

This fix corrects Pattern.assignable?(Variant) which was not
correctly supported in the type calculator. (It gave up if t2
was not a String or an Enum). Now, if t2 is a Variant,
the check recurses to the types described by the enum.
(maint) Fix Enum / Variant assignability

The type calculator did not correctly compute assignability
for an Enum when assigning a Variant type. Now, all variants
are checked if they are assignable to the enum type.
(maint) Fix problem with Enum subset not matching Enum

This corrects a problem where Enum[a] was not assignable to
Enum[a,b], since it is a subset, it should be assignable.
(maint) Add the ability to inject calling scope into function.

The InteralFunction API now has the ability to "inject" and weave
the calling scope into the dispatched arguments by calling
the method scope_param() when building the dispatcher.
(PUP-2845) Move the epp function to the 4x function API.

This moves the epp function to the new function API.
The type checking is much approved as a consequence as the function
is now protected against spilling non variable name compliant
variables into the scope.
(PUP-2845) Move the inline_epp function to the new function API.

This moves the function inline_epp to use the new function API.
This also improves the argument checking since it is not not possible
to leak non variable name compliant variables into the scope.
(PUP-2845) Remove comment about skipping mapping in call_function

The comment refers to removed behaviour. Now, since the epp
functions are moved, there is also no need to map them (there are PRs in
flight that will add such behavior).
(PUP-392) FFI ADSI GetComputerName /Add Group SID

 - Some existing tests were using Sys::Admin.get_login to get the
   current username.  Implement this same functionality in
   Puppet::Util::Windows::ADSI::User.current_user_name by making
   Win32 API call directly instead of relying on sys/admin.  Note that
   unlike GetComputerNameW, GetUserNameW returns a length
   including the trailing NULL.
 - Further, replace calls to Sys::Admin::get_user(name).sid and
   Sys::Admin::get_group(name).sid with their respective equivalents in
   the ADSI classes, namely ADSI::User.new(name).sid and
   ADSI::Group.new(name).sid.  Note that Sys::Admin returned a string
   while ADSI returns a SID object which must be converted to a string.
 - To support retrieving the ADSI Group sid, add a new class member
   and method identical to the one on ADSI User.
(PUP-392) Remove sys-admin gem

 - Update inline strings mentioning it as a dependency
Merge pull request #2787 from Iristyle/ticket/master/PUP-392-validate-gems

(PUP-392) Remove sys-admin gem
Merge pull request #2815 from hlindberg/PUP-2845_move_epp_functions

(PUP-2845) Move epp functions
(PUP-2777) Bundler Windows x64 workflow

 - Ensure that Bundler loads proper gemset whether on x86 or x64, based
   on what is defined in project_data.yaml
 - Note that latest FFI compatible gems have been added to x64 out of
   necessity, but the code fails tests, and is not yet compatible with
   Ruby 2 changes / gem updates.
 - Gem versions for Ruby 1.9.x were kept the same*, and will be upgraded
   as part of verifying gem compatibility when updating 1.9.x branch
   to use latest FFI compatible gems.
 - * FFI required an update on Ruby 1.9.x to FFI 1.9.3 to satisfy Facter
   2.1.0 which now requires FFI 1.9.3
Merge pull request #2822 from Iristyle/ticket/master/PUP-2777-Puppet-Bundler-Workflow-x64

(PUP-2777) Bundler Windows x64 workflow
(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