Adding parameter replacement

Provides token replacement for attribute routing template using a syntax like:

`api/[controller]/{id?}`

With this change the use of controller and action as parameters in attribute routes is disallowed, and will reported as an error. This is the cool new way to do it, which will provide more consistent behavior, and better performance.

Majority of the changes here are to provide a good experience for reporting errors across all the attribute routes.
Whatever tokens are the meaning route data are in your 'conventional routed system' are not allowed here.

If you're using areas, then `{area}` is not allowed. If you're using the default conventions, then `{controller}` and `{action}` are prohibited.

Basically trying to apply conventional routing + action selection at the same time is not supported. The token replacement feature handles the scenarios users wanted here without trying to marry two unrelated concepts.