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.
Why this change? Imagine I want to customize the route by deriving from template route (pretty common pattern), how would I do it now?