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.
It's possible... you won't like it. http://www.regular-expressions.info/lookaround.html

Basically you need negative lookbehind/lookahead to match `bleh[action]` but not `...[[action]]` and not `[[action]]`. I'm a regex maven so this doesn't make me nauseated.

`(?<!\[)(\[\w+\])(?!`])` does the job

There's still significant work to do after the fact, as this doesn't detect imbalanced `[` `]` or a whole bunch of invalid cases. Also with a regex it's possible to create an infinite loop. 

So. When @eilon told me that it couldn't be done with a regex, I took it as a challenge, but found that it can't be done *well* with a regex. The parser is simpler and more maintainable.