Decode + characters in path and query string to spaces

The current encoding scheme can be set to encode spaces as + symbols but the decoding does not do the opposite conversion.   That means vaiid URLs will have the wrong value held for query parameters encoded in that way.
This change adds decoding of + into the path and query string by default.  
It also adds andThen to allow simple composition of decoders.