Add error monad.
Put the frontend and interpreter in the error monad.

The generated error messages are still rather baroque. We need pretty
printers to improve these.