(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)