Use command `state` to keep track of watched expressions

This resulted in a pretty elaborate refactor of the tests, but overall I
think things are cleaner now.

Still don't have a good solution on testing the output of the hook,
however I was able to track it down to the PryTester which clears the
output after each eval. There may be a decent way to hook into that to
get the output of the hook.