Listener obj

This removes the callbacks from the mixins so they don't pollute the namespace. Instead it creates a new "listener object" that's bound to the router.

The second commit is just a naming tweak: I changed Environment to refer to observers instead of routers to make clear the idea that any interested parties can be registered (not just Router components).