update to version 1.2, add common before and after to HashRouter, so with each route, we can have 5 steps: "before" -> "route.before" -> "route.handler" -> "route.after" -> "after", (all optinal except route.handler), and they can be asynchronous with Promise