implement optionals
clean up Route a bit
helper method to get a real path out of a route
a couple more edge cases for filling in a path template

if a mapping value matches the default value for an optional variable
component, then the optional component should just be left out

if the mapping contains a value that doesn't match the corresponding
value in the route's list of defaults, then it shouldn't return anything
implement uriFor
cleanup