properly handled failed seek

This is a minor bug in the way we're handling exceptions for `super_len` in `prepare_body`. The mocked `seek` method wasn't created with the optional `whence` parameter and was failing with a `TypeError` when called. A legacy exception block for the older version of `super_len` caught this and made it appear the test was passing.

This commit will wrap the seek->tell->seek process in the appropriate exceptions and fix the test.

I think there's two things that may need further discussion though. The first minor one being, we've been using `super_len` in `prepare_content_length` without this broad exception block from `prepare_body` for two releases without issue. I'm going to suggest we remove it from `prepare_body` because I don't think these exceptions can be raised from `super_len` any longer, except in cases we probably don't want them caught.

The second is, if we seek to the end of a file and fail on the `tell` or `seek` back to the original position, do we want to actually send the request? At that point, we'd probably want to raise an exception, right? This probably is something for 3.0.0 since it will be breaking, but wanted to address it before we merge this.

# [Codecov](https://codecov.io/gh/kennethreitz/requests/pull/3873?src=pr&el=h1) Report
> Merging [#3873](https://codecov.io/gh/kennethreitz/requests/pull/3873?src=pr&el=desc) into [master](https://codecov.io/gh/kennethreitz/requests/commit/90f3842ed60f91ff101189f792ce21f7c762b1a0?src=pr&el=desc) will **decrease** coverage by `-0.09%`.
> The diff coverage is `100%`.


```diff
@@            Coverage Diff             @@
##           master    #3873      +/-   ##
==========================================
- Coverage   89.17%   89.08%   -0.09%     
==========================================
  Files          15       15              
  Lines        1893     1896       +3     
==========================================
+ Hits         1688     1689       +1     
- Misses        205      207       +2
```


| [Impacted Files](https://codecov.io/gh/kennethreitz/requests/pull/3873?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [requests/utils.py](https://codecov.io/gh/kennethreitz/requests/compare/90f3842ed60f91ff101189f792ce21f7c762b1a0...f47aff68f1352c3a5030fe70bbdf7c00171e207b?src=pr&el=tree#diff-cmVxdWVzdHMvdXRpbHMucHk=) | `84.94% <100%> (+0.12%)` | :white_check_mark: |
| [requests/models.py](https://codecov.io/gh/kennethreitz/requests/compare/90f3842ed60f91ff101189f792ce21f7c762b1a0...f47aff68f1352c3a5030fe70bbdf7c00171e207b?src=pr&el=tree#diff-cmVxdWVzdHMvbW9kZWxzLnB5) | `93.42% <ø> (-0.46%)` | :x: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/kennethreitz/requests/pull/3873?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/3873?src=pr&el=footer). Last update [90f3842...f47aff6](https://codecov.io/gh/kennethreitz/requests/compare/90f3842ed60f91ff101189f792ce21f7c762b1a0...f47aff68f1352c3a5030fe70bbdf7c00171e207b?el=footer&src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

So, this patch demonstrates the possible advantages of removing the overbroad exception block because this patch actually manages to *regress* coverage despite being completely covered. I still think we should merge it. =)

Great! @Lukasa, when you have a free moment, would you mind merging master in proposed/3.0.0 so I can rebase my changes for #3338 onto this?

I've done so, but we should see if the builds run because the merge was pretty gnarly.

😬 yep, looking a little rough. I can tidy things up if you don't want to deal with it.

heh, I'd definitely accept a PR if you're feeling in the mood. Otherwise I'll tackle it after this meeting.