[Fixes #1389] Can't bind complex type data from route parameters.

Changed DictionaryBasedValueProvider to do a prefix check instead of just checking if the underlying
dictionary contains the key.
`ReadableStringValueProvider` lazily creates this structure and it was a direct port of what we have in WebAPI 3.0. Might be safer to stick to that pattern since it's likely there was reasoning around that choice.