Reuse session SSLContexts for same TLS settings

Creates SSLContext objects in HTTPAdapter and uses a single SSLContext for connections with the same TLS settings (ca_cert_dir, ca_certs, cert_file, and key_file).

This is another try for https://github.com/requests/requests/issues/4322 

My best guess is that the failure is related to https://bugs.python.org/issue9949, but I'm really not sure.  The test is failing because using a relative path and absolute path to the same cert file creates 2 different SSLContexts in the windows tests.  I'm not sure if this is an important case, but I had added a test for it.

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

[![Impacted file tree graph](https://codecov.io/gh/requests/requests/pull/4428/graphs/tree.svg?width=650&height=150&src=pr&token=mZGswIiXLa)](https://codecov.io/gh/requests/requests/pull/4428?src=pr&el=tree)

```diff
@@                Coverage Diff                 @@
##           proposed/3.0.0    #4428      +/-   ##
==================================================
+ Coverage           89.06%   90.57%   +1.51%     
==================================================
  Files                  18       15       -3     
  Lines                2057     1570     -487     
==================================================
- Hits                 1832     1422     -410     
+ Misses                225      148      -77
```


| [Impacted Files](https://codecov.io/gh/requests/requests/pull/4428?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [requests/adapters.py](https://codecov.io/gh/requests/requests/pull/4428/diff?src=pr&el=tree#diff-cmVxdWVzdHMvYWRhcHRlcnMucHk=) | `93.69% <100%> (+0.42%)` | :arrow_up: |
| [requests/utils.py](https://codecov.io/gh/requests/requests/pull/4428/diff?src=pr&el=tree#diff-cmVxdWVzdHMvdXRpbHMucHk=) | | |
| [tests/testserver/\_\_init\_\_.py](https://codecov.io/gh/requests/requests/pull/4428/diff?src=pr&el=tree#diff-dGVzdHMvdGVzdHNlcnZlci9fX2luaXRfXy5weQ==) | | |
| [requests/compat.py](https://codecov.io/gh/requests/requests/pull/4428/diff?src=pr&el=tree#diff-cmVxdWVzdHMvY29tcGF0LnB5) | | |

------

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


I was able to look on Windows and it was clearer, the test was failing because of letter case issues, which is fixed now, I'm sorry about that.  I think symlinks are still an issue for Windows, but I haven't added another test case or anything to fix it. 

In an effort to clean up the issue tracker to only have issues that are still relevant to the project we've done a quick pass and decided this issue may no longer be relevant for a variety of potential reasons, including:

* Applies to a much older version, unclear whether the issue still applies.
* Change requires a backwards incompatible release and it's unclear if the benefits are worth the migration effort from the community.
* There isn't a clear demand from the community on the change landing in Requests.

If you think the issue should remain open, please comment so below or open a new issue and link back to the original issue. Again, thank you for opening the issue and for the discussion, it's much appreciated.