Route loading and unloading uses promises

Multiple fixes and improvements to route handling. Most notably, routes
now resolve in multiple sages entirely composed of promises. Old
functionality can still be used by overriding `load`. Closes #2.