Fixed #19508 -- Converted non utf-8 back to percent encodings.

- When having urls like `/test/~%A9`, we get `400` when project is deployed as `WSGIHandler` has fallback for `400` in case of `UnicodeDecodeError`.
- In development we get `500` because `StaticFilesHandler` is used and it does not have that fallback.
- It cannot be reproduced in tests because the `ClientHandler` again raises `UnicodeDecodeError` in `get_path_info()`.
- The problem arises when in [get_path_info()](https://github.com/django/django/blob/master/django/core/handlers/wsgi.py#L210), we decode the url in `utf-8`.
- When we pass a url, it passes through `unquote()` in `urllib` where it converts all percent encodings, even those which should remain url-encoded.


Its not ready for merge, work still in progress.
The client tries to emulate the actual conditions by calling `unquote()`, but on py3 when url contains some invalid characters, `unquote()` is not called at all. It is only called when the characters are valid.