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