Start of the types relating to functions.

Introduces both the FunctionTemplate type, which is what a function
declaration produces, and the concept of a Function type which represents
a real function with a particular signature. Each unique signature is
a distinct function type, with no conversion possible between them.