Improved documentation for QueryDict.

Added __init__ method to the documentation.
Reworded some parts around mutability of QueryDicts.

Also improved the docstring of the QueryDict class a bit.
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 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
QueryDicts (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.
The FILES attribute of HttpRequest should be a MultiValueDict.
Minor tidy up to remove repeat code.

It seems tidier to only look up settings.settings.DEFAULT_CHARSET
the once while setting encoding rather than doing it when setting
the encoding in the __init__ and also when fetching the encoding
using the property.