Route Authorization

Some flexible role-based route authorization implemented.
each route can have a `authorize` attribute, telling what roles are required for the route to enabled.

`authorize` attribute can be a structural composition of -> 
1. boolean: true means authorized, false means unauthorized
2. string: will be passed to router.hasPermission, which in turn checks if router.permissions contains this string value, and if it doesn't then asks router.parent.hasPermission (if any parent exists)
3. array: all items of array are recursively checked again and all of them must be authorized.
4. function: it will be passed router and current executing instruction, it's return value will be checked recursively
5. observable: it's value will be checked. useful when roles may dynamically change and ui must be updated.
6. undefined is treated as true
7. any other value is treated as boolean (0=false, ...)

also each route's config object will have a isAuthorized observable value, it's value indicates whether route is enabled or not.
router.permissions is a observableArray, and it must be filled by user's owning permissions. 
------

also following attributes are available right before activate/deactivate calls (and not any other hook)
rootRouter.navigatingBack & rootRouter.explicitNavigation