Use NameGen for name generation in type inferer

This prevents type variables from being duplicated in
subsequent executions of the type inference engine.

(At the moment, every line given to the REPL will reinfer
the prelude.  In another patch, that will not be the case,
and the prelude will be typechecked once.)