[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
You can leave all methods in the parent class. Child classes are required to complete implementation which are only partially existing in the abstract class; however, it would be good to mark those methods as abstract, too. Methods which are completely implemented in the parent class, don't need to be reimplemented in the child classes, but they may reimplement them to extend behaviour if needed.