[Sys.Web.Routing] Refactor of Route's GetVirtualPath implementation based on System.Web.Http.Routing code in order to fix a few incompatibilities between our implementation and the one at ms.net

This is a followup to my previous pull-request (https://github.com/mono/mono/pull/515) which tries to fix some mismatches between mono's and ms.net's System.Web.Routing.

Mono's implementation fails to properly match & build an URL in some cases when both ambient & user supplied values are being pass to Route.GetVirtualPath(..).

After digging around mono's source code for a while, I found a similar implementation at's System.Web.Http.Routing, and after a bit of hacking I managed to refactor Route.GetVirtualPath(..) && PatternParser.BuildUrl(..) to match the way it's Sys.Web.Http.Routing countarparts work.

All existing unit-tests at Sys.Web.Routing pass successfully, aswell as a few more tests I've added by myself for some use cases which were previouslly failing.

Greets
Pablo