Switch to StateT instead of IORefs.

Seems to be working.
Add a EnvThrowsError monad stack

And use it to define special forms that can throw error and
manipulate the environment, but not to IO.