Return objects from model.on() BREAKING CHANGE!!!

Adding the same function as a listener for two different events (or two
different onPath() paths) will overwrite the cleanup() functions.
This breaks query destruction for queries with dependencies (since
resetResults() is added for each dependency)

Any code that uses the returned function (other than to call cleanup())
will break.  This includes Derby; I'll fix that in Unroll-Me/derby.

Fixes #113