Two issues with spaces in paths in the API

Somewhat bizarrely, *unfiltered* passes query paths un-decoded, and also the `Seg` extractor effectively strips trailing slashes so I wrote alternatives that deal with both of those issues as well as cleaning up our dispatcher nicely.

The other issue was just caused by the parsers skipping white space by default.