Add function overloading.

Inadequacies in the typechecker often result in overloads
being erroneously reported as ambiguous. Since type
variables are not checked, this is to be expected from
polymorphic functions. A more urgent side effect, however,
is that almost all overloads require explicit "casting",
that is, being wrapped in an explicitly typed function and
immediately invoked. That needs to be fixed next.

Closes #34