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.
I'll reiterate something Brandon said. That while for general URIs the meaning of a comma in the path may depend on the scheme, that is not true for HTTP URIs. Further, we find that it's not worth neutering useful, important functionality (specifically, decoding allowed characters) for a very narrow edge case as this change proposes.

Simultaneously, we recognize your need for one behavior over another to deal with concrete customers who exhibit this edge case. Put another way, __there should exist no valid URL that cannot be expressed with this library__. With that in mind, we'll implement an optional argument `strict` to `escape` to support your use case while allowing the current default behavior to go unchanged.