Fixed #19508 -- Used uri_to_iri.

This is a PR for ticket #19508 for which another PR #2919 was opened by me a few days ago.
This PR implements `uri_to_iri` as per RFC and changes the `PATH_INFO` at the very time when `environ` is being set contrary to the previous one which corrected the received url from `environ`.
The latin1 encoding mess is a WSGI thing, Django wasn't always a WSGI framework, and who knows what will be the next best thing in the future. When these things were contained in the WSGIHandler that made sense, but if we extract a reusable function it shouldn't be tied to such specifics.