reserved chars escaping is not compatible with what browsers do
This is weird, but browsers don't usually escape |; Chrome only escapes it in URL path, but not in query; Firefox doesn't escape it at all. See https://github.com/scrapy/w3lib/pull/25#issuecomment-305752348.
That's a pretty cool survey of browser behavior you've got in there! It also keenly demonstrates the moving target with trying to emulate browsers. That said I've got some ideas of how to achieve similar behavior, related to #28. In short, make these global behaviors customizable based on a context. It'll probably come after we get a more modern IDNA approach, but it's definitely on the roadmap! :)
(I'd be really interested to see what the WHATWG URL spec says browsers should be doing, here…)