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.
yep, we can add the same syntactical form here. There was a question about how far to take it:
- do we for instance detect imbalanced/unclosed braces?
- using things like a `/` in between them? 
- using a 'token replacement' for an unknown value (`foo]`)

Adding the ability escape seems reasonable, just means we need to write a parser, which I was hoping to avoid.