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:

```js
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`. This mean that `req.path` is now the full path and is no long 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