Create a new copy of routedata for each 'router' 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.
:+1: I've always wanted to be able to look at `Exception.Data` and make sense of what the source of an exception was. We also do something similar with Razor compilation failures (stashing stuff in the exception)