Issue #92 - Part 2 - Make properties on TemplateRoute readonly

This change is a substantial refactor of how we realize inline
constraints, and moves the constraint resolver out of the parsing phase.

This allow creates a builder for the constraint map, that will make it
easier to implement features like optional constraints, and is reusable
for anyone building their own type of routing system.
pullout ```Assert.Single(result)``` in a variable and replace ```result.First()``` and here with the variable.