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`.
Hi Baptiste

Why the copy()? I read a line in the documentation saying that QueryDict's are immutable unless copied, but I guess that's a description of what happens rather than how to instantiate them. A quick grep through the code revealed some being created like that, but on another look, that's just the tests to make sure copied QueryDicts are mutable. I'll change it to use `mutable=True`.

I agree it would be nice to remove the required argument, but I'm a bit wary of changing signatures. Could that cause trouble for someone who's instantiating QueryDicts with *args and **kwargs?

Cheers,

Duncan