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`.
For reference, the bit of the docs referring to .copy() is here:

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict

It would be nice to make the code reflect the docs and have `.GET` and `.POST` immutable on HttpRequest as they are on WSGIRequest, but as per anything backwards incompatible, the relative hassle for people has to be weighed up. Changing it would make some tests fail, leaving it encourages tests which don't reflect reality, but only in odd cases (this is how I came to be looking at this in the first place). It's obviously not the kind of backwards incompatible change that needs doing in a hurry.

I'll have a think about an example for making query_string optional causing trouble.