Fix prettyprinting (details below)

Resolves #4 

* Generate names for variables
* Do it in a monad
* Fix bugs with bound variable numbering in printer (whoops)