Cc 883 t2

OK, take two. For some reason the first pull request for these changes did not get merged. I'm gonna stay on this one, since it fixes two bugs (and a lack of one feature) in the url module that prevent me from using the main, most recent version.

* First bug: Contrary to RFC 3986, a %-encoded GEN-DELIM or SUB-DELIM character in the path or query part was treated identically to a non-encoded such character. They should actually be different.  E.g. http://foo.com/Seattle,WA%27USA should normalize to itself, and not to either http://foo.com/Seattle,WA,USA or http://foo.com/Seattle%27WA%27USA .

* Second bug: Relative URL's (i.e. URL's with no host name like /foo.html encoded to http://None/foo.html).

* Missing feature: URL's with embedded usernames and passwords were not supported.

Not only is the code on the trunk usless for my crawler (because it makes it behave), it is outright incorrect and will thus tend to make any program using the trunk version misbehave. So it's fairly urgent that these changes get incorporated. Thanks.
This can be simplified with [re.sub](https://docs.python.org/2/library/re.html#re.sub) which allows you to provide a replacement method.