Reimplement -catch: without subscribeForever, and add basic tests

Switches `-catch:` to a one-time subscription instead of setting up a recurring subscription. Also adds a few basic tests.