Fixes Path & Query handling of + and special chars

The + character should not be substituted for a space within a path
element of a URL. To be on the safe-side, we will always output it as a
percent-encoded character.
Using + in place of a space character within the query string is a
deprecated practice. Spaces are now percent-encoded within the query
string.
This also corrects the handling of other special characters within the
query and path segments. (e.g. *,;() etc.)
Fixes percent-decoding in the URL Fragment

URL Fragments may contain percent-encoded characters, and so, should be
percent-decoded.
Fragments may contain special characters that do not need to be encoded.