[WIP] upgrade ModUrl usage for Route compatibility

This is still a WIP but posted now to encourage discussion.

This is one approach. The idea is to maintain BC by allowing ModUrl to continue to do what it did before but add another option to create a RouteUrl if a module supports it. Both types would be storable and allow a functional Url to be generated from the data.

/cc @Guite @drak @cmfcmf

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| Refs tickets  | #1945
| License       | MIT
| Doc PR        | -

TODO:
 - [ ] Modify Searchable to use UrlInterface instead of ModUrl
 - [ ] Modify Hooks to use UrlInterface instead of ModUrl
 - [ ] look for other applications of ModUrl in the core. replace as needed.
 - [ ] test/finalize
I know I'm annoying, but it *might* be better to use `$this->fragment !== null`. This would allow to add an empty fragment by setting $fragment to `''`.