Made query_string argument to QueryDict optional defaulting to None.

Previously, a blank QueryDict could be created by calling

QueryDict(str('')) or QueryDict(None)

It seems rather nicer to just allow the query_string argument to
default to None so that we can just write QueryDict().
Made GET and POST on HttpRequest QueryDicts, and FILES a MultiValueDict.

Previously, GET, POST and FILES 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, POST, or FILES 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
QueryDicts (mutable because the Django tests, and probably many
third party tests, were expecting it). Changed FILES to be a
MultiValueDict.

Also added a regression test for this by adding calls to .urlencode on
GET and POST, and to .getlist on FILES, to the test on a newly created
HttpRequest.