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.
Discussed in person, you can do this by providing your own flavor of `MapRoute` which we think is good enough. Will add a sample demonstrating this.