Refactor Prepare Body

This PR supersedes #3338 with the branch brought up to date, as well as a few minor changes, including logic tweaks based on updates to `super_len` since the original PR.

This will forcibly prevent the transmission of headers that include both Content-Length and Transfer-Encoding, as well as simplify redundant code we use for both `prepare_content_length` and `prepare_body`. All the credit here goes to @davidsoncasey, the original creator of this PR.

# [Codecov](https://codecov.io/gh/kennethreitz/requests/pull/3897?src=pr&el=h1) Report
> Merging [#3897](https://codecov.io/gh/kennethreitz/requests/pull/3897?src=pr&el=desc) into [proposed/3.0.0](https://codecov.io/gh/kennethreitz/requests/commit/60339d17eede9d424df9ed685ff8d60caeb3a521?src=pr&el=desc) will **increase** coverage by `0.11%`.
> The diff coverage is `100%`.


```diff
@@                Coverage Diff                 @@
##           proposed/3.0.0    #3897      +/-   ##
==================================================
+ Coverage           89.21%   89.32%   +0.11%     
==================================================
  Files                  15       15              
  Lines                1928     1930       +2     
==================================================
+ Hits                 1720     1724       +4     
+ Misses                208      206       -2
```


| [Impacted Files](https://codecov.io/gh/kennethreitz/requests/pull/3897?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [requests/utils.py](https://codecov.io/gh/kennethreitz/requests/compare/60339d17eede9d424df9ed685ff8d60caeb3a521...be2f92b9e300d0b5c7af0fed7d1f421b06676d3a?src=pr&el=tree#diff-cmVxdWVzdHMvdXRpbHMucHk=) | `85.93% <100%> (+0.14%)` | :white_check_mark: |
| [requests/exceptions.py](https://codecov.io/gh/kennethreitz/requests/compare/60339d17eede9d424df9ed685ff8d60caeb3a521...be2f92b9e300d0b5c7af0fed7d1f421b06676d3a?src=pr&el=tree#diff-cmVxdWVzdHMvZXhjZXB0aW9ucy5weQ==) | `100% <100%> (ø)` | :white_check_mark: |
| [requests/models.py](https://codecov.io/gh/kennethreitz/requests/compare/60339d17eede9d424df9ed685ff8d60caeb3a521...be2f92b9e300d0b5c7af0fed7d1f421b06676d3a?src=pr&el=tree#diff-cmVxdWVzdHMvbW9kZWxzLnB5) | `93.73% <100%> (+0.4%)` | :white_check_mark: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/kennethreitz/requests/pull/3897?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/kennethreitz/requests/pull/3897?src=pr&el=footer). Last update [60339d1...be2f92b](https://codecov.io/gh/kennethreitz/requests/compare/60339d17eede9d424df9ed685ff8d60caeb3a521...be2f92b9e300d0b5c7af0fed7d1f421b06676d3a?src=pr&el=footer&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

@nateprewitt nice work on this, thanks for getting this over the finish line

@davidsoncasey, glad we're able to get all of your work merged, thanks again!

@Lukasa, 3.0-HISTORY is updated :)

It's the little things you forget setting up a new machine 😅 Time to add a global .gitignore.