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.
same as above.