[Fixes #90] RouteTemplate does not take RouteData

Changed the implementation of route template to merge the existing route data
with the values obtained from parsing the request path with the given template.

Restored original route data values in case the route template data does not match.

This also takes care of #16 for some scenarios
What's the point on values not being polluted? It is a value local to RouteAsync that only gets returned if the route matches (in which case it should be returned). If the route does not match it will be thrown away, so why bother copying?