Hierarchical Routers' Enhancements + Route authorization

Well, I had to cleanup and re-design most of router plugin, now it's more promise based and easier to change, maintain and add new features.

Now hierarchical routers with no constraint on depth are supported, and all life-cycle hooks are executed in a more expected way. 
However there's some changes that are not backward compatible and may break.

Here's a summary of changes, tomorrow I'll try to explain changes and new possibilities in depth.

- createChildRouter may be called first time when module is acquired by requirejs, or in activation life-cycle functions, parent will be the router that activates or require it, not the one created through.
- "router:route:activating" is triggered after canDeactivate/canActivate calls, before real activation.
- Activation life-cycle hooks cannot return redirect tokens, but they may call navigate and return false
- Navigate calls on non-root routers is relative if they specify fromParent, however it's possible to configure router to use absolute path, by specifying relativeNavigate=false
- After navigating out of a child-router's page, all pages under router (sub-tree) are completely deactivated.
- For reusable modules, isClose parameter provided to canDeactivate and deactivate hooks is false, and for other modules isClose is true.

- ~~No more rootRouter.explicitNavigation & rootRouter.navigatingBack, I have removed them in favor of clean code, I couldn't imagine any use case for them.~~ *implemented again 15d2be0*
- loadUrl returns a promise which is resolved to navigation result when navigation completes or get canceled in any way (It resolves in the end of activation calls, not composition)

**There's a unresolved issue with cached views** 2ce1689 (when cache is enabled for root router, pages with child-router may or may-not attach their activated view)