Intermediate commit.
The first stage of refactoring HM type expressions

to use state monad instead of static variables is
now complete. Need to remove the static variables
from Monotype next, and replace TypeExpr with
TypeCheck<T>.
Come to think of it, I don't need the satellite data at all.

Can store the expected type of each expression to its
respective AST node as such, and resolve the actual
type when the whole definition has been type checked
and I have the substitution table at hand.
Expressions now use the new TypeCheck generator

instead of the old TypeExpr. Since it is compiling and
tests are passing I made this intermediate commit.
Another intermediate commit

before I break the code again by removing
the last static variables from MonoType.