Make the `Hooks` module easier to unit test.

Simplify the `Mockery` "API" that is used by the `Hooks` module i.e.
there is no real need for `Hooks` to have direct access to the `Mockery`
instance.
Ensure `Mockery` instance gets reset even if exception raised.

It's unlikely but possible that an exception may be raised in
`Mockery#teardown`. We should ensure that the `Mockery` instance gets
reset if this happens.

I'm not really happy with the way the test works, but without major
changes this is the best I can do for now.

Fixes #144.

I saw this while investigating #142.