Fixing the issue #123

Here is what the fix does:
1. If the parameter has inline constraint but is optional as well, it creates OptionalRouteConstraint -- which is new type of constraints added -- for that parameter. The OptionalRouteConstraint takes the original IRouteConstraint that would have been created for this parameter as input.

2. The 'Match' method on OptionalRouteConstraint checks if the value for the parameter is present. If it is it delegates to the 'Match' method of the original IRouteConstraint. If the value is not present, it returns true. 
Looking through these tests, I think there's already good direct unit test integration for what you are adding.

I'd still really like to see a test that covers the following:

1). Construct a template route (with optional parameter/constraint)
2). Actually run the thing (in an xunit test)

And there's an important variation on 1). - you should be able to pas the constraint inline (in the template) or in the constructor parameter to TemplateRoute.

See TemplateRouteTest for examples of similar tests.