(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-2737) move regex from ssh_authorized_key provider to the type

Defining the regular expression for the ParsedFile based provider of
the ssh_authorized_key type on the type level rather that directly in
the provider code, it becomes easily possible to reuse it in other types.
(PUP-2737) use the general regex to match ssh_authorized_keys for purging

In order to generate ssh_authorized_key resource for purging, the user
type needs its own parsing logic for ssh_authorized_keys files, as it
cannot directly emply a provider of ssh_authorized_key. This was originally
implemented in a rather half-assed way and worked only for keys without
spaces in the comment string (which Puppet uses as the resource title).

To fix this, unify the parsing logic by using the same regular expression
with which the ssh_authorized_key provider extracts the respective fields
from the keyfiles.
(PUP-2737) fix an error in the user type unit test for ssh key purging

After fixing PUP-2737, it became apparent that there was an error in the
expectations agains the fixture for the user type unit tests. A key
from the fixture did contain spaces in its comment, but the unit test
actually failed to expect the correct value.

Now that the full resource title is retrieved, make a slight adjustment
so that the test keeps working and uses a more appropriate name for the
key.
Merge branch 'pull-2753'

* pull-2753:
  (PUP-2737) fix an error in the user type unit test for ssh key purging
  (PUP-2737) use the general regex to match ssh_authorized_keys for purging
  (PUP-2737) move regex from ssh_authorized_key provider to the type

This closes GH-2753.
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.