Fixed #22799 Made GET and POST attributes of an HttpRequest object QueryDicts.

Previously, `GET` and `POST` on an `HttpRequest` were created in the `__init__`
method as dictionaries. This was not something you would usually notice
causing trouble in production as you'd only see a `WSGIRequest`, but in
testing using the test client, calling `.getlist` on `GET` or `POST`
for a request with no get/post data used to result in an `AttributeError`.

Changed `GET` and `POST` on a vanilla `HttpRequest` object to be mutable
`QueryDict`s (mutable because the Django tests, and probably many
third party tests were expecting it).

Also added a regression test for this by adding calls to `.getlist` to
the test on a newly created `HttpRequest`.
I hadn't tried to run the test but you're right. Any failing test means we'd be breaking backwards compatibility which is a big no-no.

I hadn't realized that the `.copy()` gave you a mutable object. That's a pretty quirky API.

Regarding making the `query_string` optional, I'm trying to think of a situation where we'd be breaking somebody's code but I can't think of any. Do you have a practical example?