Normalize escaped characters correctly

Not all escaped characters should be escaped. Normalization should take care of this. A better approach is to simply do `encodeURIComponent(decodeURIComponent(...))`.

Path and query segments are now normalized in this way. `+` should be replaced only in query string with space, not in path segments or hash (hash/anchor can contain many characters, `+` as well).

Normalization of `index.html` is quite aggressive and far from universal. Made it optional.

A good reference for normalization techniques and pros/cons is: https://en.wikipedia.org/wiki/URL_normalization