Adding DataTokens Support.

Does not contain anything specific for attribute routing. 
Conditionally testing things in unit test is a indicative that you're trying to verify two separate scenarios. nulls and empty objects are treated differently - you wouldn't require the condition in the event all code paths for a theory are the same. 

For the second part, it's much easier to understand what parameters you are expecting by looking at the theory if it is explicit, than doing what this test currently does. `RouteValueDictionary` is a type in Routing and by using it, there's a risk that by using it to verify the test results, you are simply verifying the implementation (which might have regressions rather than the actual expectation). Say for instance `RouteValueDictionary` was changed to so that it returns a dictionary `new { key1 = 13, key2 = "value1" }` for the last data value. The test would happily accept this change and continue in pass, but a fixed expectation wouldn't.