Add (vaguely) usable equals methods to typed path component extractors
New PathTree implementation.

This one's MUCH cleaner.  A tiny bit less flexible, but no one was going
to match on non-strings anyway.
Switch to the new PathTree to back Routes with

Amusingly enough, this reimplementation discovered bugs in the old tests
and hence in the old PathTree implementation.
Another test to make sure extractors are being merged correctly.