C Git support escapes in ssh:// yes and this seems to apply for all scheme:// formats. I was a bit surprised when I
discovered it because I deliberately skipped this when I wrote this class originally, just because C Git didn't (or I though it didn't). I'll change class comment too.

I parse all fields so we can read them as clear text. Didn't think
of HTTP though. If we create an HTTP URL from plain text, we need to escape it even if it wasn't escape at first, so this is consistent, I think. It may not be very efficient, but then how many times do we decode/encode? The constructor throws
and exception if the string is not valid so we have to parse always. 

A bonus (or feature...) is that toString normlizes the encoding.