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.
> Please support encoding keyword-only method argument for overriding json encoding.
I'm afraid, this isn't actual any more:
https://docs.python.org/3/library/json.html#json.loads
> The other arguments have the same meaning as in load(), except encoding which is ignored and deprecated.