Implement 'stack of routers' for MVC

This is the MVC companion to https://github.com/aspnet/Routing/pull/122

As routing flows, routes replace the route data and mutate a copy. This
allows users to make changes that dirty the data without affecting
undesired state changes.
Completely unrelated to this PR, we should settle on either `Debug.Assert` or `Contract.Assert`. I'd prefer `Debug` simply because we don't use CodeContracts and I'm guessing we don't actually expect the assert to be the one raising an exception for us.