(PUP-2027) Use Callable in Function API

This changes the impl of the Function API to use the Callable type
instead of using a Tuple. This is in preparation for handling
blocks since a Callable type also encodes the functions requirement
regarding a trailing block (no-block, optional, required) and its type
signature.

This also moves the functionality to check argument compatibility to
the TypeCalculator. It now has a callable?(callable, args_type) since
this is different than assignable?
(PUP-2027) Support lambdas in 4x function API

* Adds ability to accept lambdas/blocks in the 4x function API
* Adds ability to define "last arg captures rest"
* Adds CallableSignature as API for information about a callable (was
  different for functions and lambdas earlier)
* Function and Closure now implements CallableSignature
* Refactoring of how evaluator calls functions (no need to assert
function exsistnce separately (just takes time to look up functions
twice).
* TypeCalculator can now infer Callable from Function and Closure
* TypeFactory supports creating Callable with a block type last
* Callable type is given convenience methods to get range of types and
  block (accepted, optional, required).
* Spec tests added for many additional examples (for blocks)
(PUP-2176) Change to correct evaluating parser for puppet function load

The PuppetFunctionInstantiator used the future parser for 3x.
(PUP-2176) Add validation of puppet function name (must be name spaced)

This adds validation in the 4x checker to flag puppet function
names that are not namespaced.
(PUP-2176) Make loading of puppet functions not nest under modulename

Before this fix, the puppet function loader:
* accepted puppet functions in the global name space
* mapped foo.pp request to <moduleroot>/functions/foo.pp
* mapped mymodule::foo.pp to <moduleroot>/functions/mymodule/foo.pp

Now:
* searches for global names will not find puppet functions.
* mymodule::foo.pp is mapped to <moduleroot>/functions/foo.pp

(requested name vs. actual name was already checked)
Merge pull request #2531 from hlindberg/pup-2176_restrict-puppet-functions-to-module-namespace

(PUP-2176) Restrict puppet functions to module namespace