Rewriting entire API and a bunch of internals.

We represent the routes as a tree structure, so it makes sense to have
the builder be a tree structure as well. The previous API was sort of
weird in that you could technically speaking have both a number parser
and a string parser for the same parametric segment (the first one to
get added would be the one that actually was present in the tree).