If Content-Length is already set, don't override

Re: #1159
Guard against users sending unprepared requests.
Merge pull request #1119 from Lukasa/diags

Better diagnostics when trying to send unprepared request
Merge pull request #1161 from sigmavirus24/fix1159

If Content-Length is already set, don't override
Fix the potential issue mentioned in #1151

See: https://github.com/kennethreitz/requests/pull/1151#issuecomment-12905796

This is solved by just reusing the PreparedRequest from the last request.
We shouldn't be sending the data on redirect.

As such, we should remove the body from the old request as well as the
Content-Length header.
Preserve the original request.

Let's make a copy to preserve it.
Resolve @piotr-dobrogost's concerns

Piotr had good objections to my not re-sending the body of the request on 307.
Merge pull request #1173 from sigmavirus24/use_send_in_resolve_redirects

Use send in resolve redirects
Fix Setting a cookie on redirect
urllib3 update

#1053
And tests
Test and perfection for cookie handling.

I also fixed up some of the RequestsCookieJar methods so using
jar.update(other_jar) works without a problem. This cleans up some of the code
in sessions and the resolve_redirects method.
Merge pull request #1180 from sigmavirus24/master

Fix Session level Cookie Handling