At the conclusion of `client.request`, the TCP connection is closed so you don't have a second chance to read the body after that. For responses that are expected to be small and read into memory, it's okay to call `read_body` like we do here when no block is given. For a large response, you need different logic to stream the result to disk like we do when the `response_handler` block is given.

Aside from that, this is a little hacky, but necessary to make things work without a lot of method signature change carnage. Typical HTTP usage expects just to get the body of the response back, either as a string or as a data structure parsed from the response. So the get/put/post/delete methods just return whatever was in `return_value`. For `Chef::REST` this works fine because we replace `return_value` with the result of the json parsing, but for `HTTP::Simple` you probably just want the string back. The only other way to do this is to make a middleware that does what you suggest, but that seems like it shouldn't be necessary IMO.