Enforce a router's `root` as its mount point

This enforces routers with a specified `root` to only consider paths as
matching its route handles if that path is semantically within the
router's `root` path. For example:

    router.set('root', '/app/');

    router.hasRoute('/app/');    // => true
    router.hasRoute('/app/foo'); // => true
    router.hasRoute('/bar/');    // => false

This change fixes some issues with paths being erroneously considered
matching even when they were not semantically within the router's `root`
path.

The `getPath()` method now returns the _full_ current path, whereas
before it returned the current path relative to the router's `root`.

These changes will break backwards compatibility with some apps, but
fix some fundamental issues with how Y.Router handled `root` paths.

Fixes #1083
Update user guide and add HISTORY entry for Router mount point changes
Update hash-based routing test to check for the full path in `req.path`
Fix syntax highlighting in App's HISTORY.md
Add note about `req.path` being the full path in App's HISTORY.md
Flip arguments of Router#_pathHasRoot() method and fix unit test
Merge branch 'router-root' into dev-3.x
Build Router