Fix memory leak

It turns out that having H.catch around too large a block means that
state is retained. In particular, having the catch around a recursive
application of the REPL means that all previous states get retained! So,
be careful to scope catch blocks around the smallest possible block.