More Enhancements

- canReuseForRoute may return promise
- contextRouter is set before all activation lifecycle calls.
- loadUrl is only exposed on root router

Order of activation life-cycle calls is as follows:
 - canReuseForRoute
 - getRouter (if canReuse is false, getRouter will be called to be asked for canDeactivate)
 - canDeactivate
 - canActivate
 - getRouter (only if canReuse were false, to be asked for canActivate)
 - deactivate
 - activate