Preserve and separate request and response bodies

The body attribute would be set with the body from the response once a
request was completed. The other attributes of the request (url,
headers, etc.) are not clobbered because they don't share the same keys.

In the case of the headers, the work had already been done to separate
them out into separate attributes (response_headers vs.
request_headers). This does similar work.

Fixes #297

Depends on #389 since this breaks untested functionality in the Retry middleware. Once that has been merged, then this pull request needs to be modified so that the small amount of work from https://github.com/Nitrodist/faraday/commit/3348e99f8c0e94881848879f3b7b0a3794bea14a goes into it as well.