Changes to IRouteMetadataProvider and friends

These are a subset of the changes from #1519 that @thecodejunkie and @grumpydev requested be sent as a separate PR.

- A minor improvement to the `IRouteMetadataProvider` interface to allow implementations to support returning more than one type of metadata.
- A tweak to the docs for `IRouteMetadataProvider` to indicate that an implementation may return `null` if no matching metadata is found.
- A related tweak to `RouteCache` to have it handle `null` metadata.