[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
ping @Guite @drak - is it appropriate for the abstract class to implement the interface? or should the child classes implement it separately?