Extract callbacks from mixin

This way we don't conflict with user methods for those creating custom routers.
Call them "observers" since non-routers can listen
Merge pull request #41 from matthewwithanm/listener-obj

Extract callbacks into listener object