spy/catcher: better exception-handling strategy

Always raise a CaughtException, and install a hook to print it nicely if
it propagates to the top level.
update tests for spy.catcher changes
doc/api/spy: update for spy.catcher changes