More extensive while-loop altering

This is offered as an alternate/addition to my other PR, https://github.com/kennethreitz/requests/pull/3846

Specifically the code is in this commit: https://github.com/jvanasco/requests/commit/5e9371854176164db9ce5fee5ceb39b58f4035b2

This passes current tests, but it's a bit of a change so I'm offering it separately.

The existing redirect code was incredibly confusing, because objects were being overwritten mid-loop, select items had to be removed, and then everything needed to be switched back again.

This approach does a major reorganization of the logic, but I think for the better:

# SessionRedirectMixin.resolve_redirects

The `hist` tracker makes more sense.

* `hist` is started off with the original response. 
* after the redirect response is created, it is updated with the "current" history
* `hist` is then updated with the new response

# Session.send

Because the `Request.history` was carefully constructed within the loop context, the history had to then be shuffled around and response updated.  The above change makes that unnecessary, and instead `r ` is just popped off and used as-is.

I think this makes the code easier to read and maintain, and it removes that weird shuffle at the end.  It's a bit of a change though, and might break the API in a way that is currently untested.



# [Codecov](https://codecov.io/gh/kennethreitz/requests/pull/3866?src=pr&el=h1) Report
> Merging [#3866](https://codecov.io/gh/kennethreitz/requests/pull/3866?src=pr&el=desc) into [master](https://codecov.io/gh/kennethreitz/requests/commit/ad65b0cb19124b5ae4dd01bf19d82c16ffb2485d?src=pr&el=desc) will **decrease** coverage by `-0.01%`.


```diff
@@            Coverage Diff             @@
##           master    #3866      +/-   ##
==========================================
- Coverage   89.05%   89.04%   -0.01%     
==========================================
  Files          15       15              
  Lines        1873     1872       -1     
==========================================
- Hits         1668     1667       -1     
  Misses        205      205
```


| [Impacted Files](https://codecov.io/gh/kennethreitz/requests/pull/3866?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [requests/sessions.py](https://codecov.io/gh/kennethreitz/requests/compare/ad65b0cb19124b5ae4dd01bf19d82c16ffb2485d...5e9371854176164db9ce5fee5ceb39b58f4035b2?src=pr&el=tree#diff-cmVxdWVzdHMvc2Vzc2lvbnMucHk=) | `92.77% <100%> (-0.03%)` | :x: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/kennethreitz/requests/pull/3866?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/3866?src=pr&el=footer). Last update [ad65b0c...5e93718](https://codecov.io/gh/kennethreitz/requests/compare/ad65b0cb19124b5ae4dd01bf19d82c16ffb2485d...5e9371854176164db9ce5fee5ceb39b58f4035b2?el=footer&src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

closing in favor of other PR #3846 

Thanks!

It is worth resubmitting the clarified loop as a new PR for discussion?  

Rebased against the current master, it looks like this:  https://github.com/jvanasco/requests/commit/f1cbdfbc7a18e1ac41f8cdcec107a634674ae5ae

and gets rid of some of the janky looping code.

Certainly I'd be happy to see it. =) Can't speak for Kenneth, of course.

@jvanasco yes but please make that commit message easier on the eyes :)