Fix for #77 - pass ambient values not in the template to constraints

This change adds tests and makes the behavior consistent with legacy MVC
as far as what values are visible in constraints.

This is important because it allows constraints to make decisions based on
whether or not a value is present even if it's not in the template. This
is similar to the behavior of WebAPI link generation or Area link
generation in MVC 5 - but without hardcoding.
I chose to make a composite result type here (with 2 dictionaries) because I felt like the other options were pretty bad. The 'combined values' are an artifact of constraints only - link generation would need to reverse the process to remove the extra values. So rather than placing code in two places I put it in one and made two collections.

If the allocations are found to be an issue here we can implement a copy-on-write dictionary - since having 'extra' ambient values is the unlikely case.