Fix for #65 - Implement 'stack of routers'

This is the routing part of the fix. MVC will be updated as well
(attribute routing).

As the graph of routers is traversed, routers add themselves to the
current 'path', which unwinds on a failed path.

This mechanism is opt-in. Whoever adds something needs to remove it as
part of cleanup. If a router in the tree doesn't interact with the
.Routers property, then there are no consequences for those that do.
You'll notice that `context.RouteData` is set **after** constraints. So no change happens to the context if constraints throw.