Refactor client response decoding

On the rights of the idea. I'd used these changes for some time and found them very handy, would like to hear what you think about. While I expect that they could be a bit radical, current JSON handling inside `.read()` is really creates more problems than tends to solve.

Replacing `read_and_close()`  with `read(close=True)` is a necessary evil - otherwise we'll have `json()`/`json_and_close()` etc.  - that is awkward.
I mean `return json.loads(self._content.decode(encoding))` not `return json.loads(self._content.decode('utf-8'), encoding)`