(PUP-514) Ensure with() takes Type arguments

With hadn't been checked that it can take a Type as an argument.
Normally this kind of check wouldn't be needed, but as the type system
and calling conventions have been sorted out, this hasn't always worked
as intended.
(PUP-514) Enforce types on lambda parameters

This updates Closure code to implement type checking for the parameter
values.
(PUP-514) Error when required args follow optional

This adds a check when the signature for a closure is being calculated
to catch invalid parameter specifications where required arguments are
placed after optional onces. Allowing that would mean that the argument
range information would be incorrect.
(PUP-514) Only check lambda args once

The previous implementation checked the argument types twice against the
signature. This reduces it to a single check. The error for a missing
argument is now caught in a place that used to be unreachable and so the
error has been converted into an issue, which also provides the
information about where the failure occurred.
(PUP-514) Extract method to match args with parameters

The call() method of Closure was getting unwieldy. This extracts one of
the large portions of it and starts working it down into something a
little bit smaller.

Because this is on the normal path for evaluation, I don't want to
extract too many methods. Every method call is significant overhead here
:(
(maint) Remove unused/inefficient code

The optional_parameter_count method isn't used anymore, the signature
calculates that as it figures out the signatures. There were also a few
places that used slightly inefficent means of doing things. Using a proc
reference instead of a block is much faster. It also removes some
garbage creation that isn't needed during the type signature
calculation.
(PUP-514) Type check EPP arguments

This adds type checking to the call_by_name invocation of closures,
which is used for EPP templates. There is a pending test for issuing an
error for slurp parameters in EPP templates.
(PUP-514) Check for slurp arguments in EPP

EPP, because it uses named parameters, does not support using slurped
(captures rest) parameters. This adds a static check to catch that being
done.
(maint) Clarify "spill_over" for call_by_name

The spill_over concept was incredibly confusing, partly because it was
designed for a much complicated case than is actually supported right
now. The currently supported system is a much simpler switch between
having parameters specified or not. This changes it to make that clearer
throughout and also remove extra checks that were being done when they
weren't needed.
Merge pull request #2599 from johnduarte/pup-2399-mailalias-acceptance

(PUP-2399) Add mailalias acceptance tests
Merge pull request #2764 from jpartlow/issue/master/pup-2756-fix-undef-acceptance-for-future-parser

Issue/master/pup 2756 fix undef acceptance for future parser
(maint) Stop using ambiguous Manager name

Manager is not a very good name for a class. What does it manage? What
does it mean to manage that? How does it manage? Who manages the
manager? This renames the Profiler::Manager class to just
Profiler::AroundProfiler because it modifies profilers to work so that
they automatically go around a block. This is then the interface exposed
by the Puppet::Util::Profiler singleton.
Merge branch 'pr/2758'

* pr/2758:
  (maint) Stop using ambiguous Manager name
  (PUP-2747) Add support for multiple profilers
(maint) Improve tests for slurp on define/class

The tests for define and class rejecting `*` parameters put another
parameter after the one specified with `*`. This created an ambiguity in
the test for why it is failing, since `*` is not allowed before any
other parameters. Since the assertion is that define and class simply
cannot have `*` parameters, the better test is to have a single
parameter with a `*`.
(maint) Remove duplicate test
(maint) Fix typos and remove dead code
(PUP-514) Invert use of parameters_specified

When see_scope was renamed to parameters_specified it was done
incorrectly and actually meant parameters_not_specified. The logic
seemed wrong and convoluted at the time, but I couldn't see how. Joshua
Partlow pointed out that parameters_specified was being set to true when
the parameters were actually *not* specified. By flipping all of this
around it all becomes a bit more obvious.
(maint) Use common mechanism for pushing scope

The block expressions were doing the ephemeral scope protection in their
own way, but duplicating the with_guarded_scope logic. This changes them
to all use the same way.
(maint) Remove optional_object

Object is now the top class and so there is no need to use
Optional[Object] everywhere. This removes the type factory method
optional_object and replaces all occurrances with just object. It also
updates all of the uses of Optional[Object] to use just Object.
(PUP-2271) Allow yumrepo proxy attribute to be set to _none_

Add fix and test to allow proxy to be set to _none_ to bypass global proxy
configuration for YUM.

See https://tickets.puppetlabs.com/browse/PUP-2271