Moto server
Changes moto for s3 tests from monkeypatched/mocking to server mode. This allows aiobotocore exceptions to raise correctly, needed for tests to pass; the change is required by the upcoming async release of s3fs, but also works for old sync (botocore) version. A release of s3fs without this change would break pandas tests.

Note: since I now need to pass storage_options to the various s3 calls in the tests to make them pass (giving the endpoint of the moto s3 server), I needed to also plumb storage_options through the excel IO, which was previously missing, and update the excel tests.

- [ ] closes #xxxx
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Good to go.
Does something like this need a whatsnew, when it only affects the tests and won't be seen by users?
I could add whatsnew about the excel integration, although it's pretty niche.

Sorry about the long commit list, it contains the original list of commits from #35381 (i.e., wasn't squashed here, only in master). @jreback : went green again I didn't understand "comment on the impl" - but I did move the imports and add a sentence to whatsnew for excel. lgtm. @TomAugspurger if any comments. I see one environment where there's moto but not flask, which results in skips like https://travis-ci.org/github/pandas-dev/pandas/jobs/717300240#L4633.

- ci/deps/azure-37-locale.yaml

Also, at least some of the tests are being skipped for other builds.

- https://dev.azure.com/pandas-dev/pandas/_build/results?buildId=40289&view=logs&j=4b4d380c-92b5-58cf-5b80-2c6c9b1d5805&t=e685736b-3705-5348-f648-7de631559230&l=2417 (moto too old)
- azure-38-locale: https://dev.azure.com/pandas-dev/pandas/_build/results?buildId=40289&view=logs&j=b1c7b65e-b3ce-541a-7fd5-29b4ba56ce18&t=f832e1c9-f124-52e9-664c-6040860879fb&l=2159 (no s3fs)
- azure-37-locale: https://dev.azure.com/pandas-dev/pandas/_build/results?buildId=40289&view=logs&j=a3a13ea8-7cf0-5bdb-71bb-6ac8830ae35c&t=99777837-3d45-5d3a-4778-aac6f4679b04&l=2217 (no s3fs)
- travis-37-cov: https://travis-ci.org/github/pandas-dev/pandas/jobs/717300242#L4113 (moto too old)

I think we should take the files that have s3fs and ensure that they have new enough versions of moto and s3fs. That would be

* ci/deps/azure-37-slow.yaml
* ci/deps/azure-windows-37.yaml
* ci/deps/travis-37-cov.yaml
* ci/deps/travis-37.yaml @martindurant the old pyarrow seems to be coming from defaults. Perhaps only conda-forge has new enough packages for us.


So maybe make sure that all the pyarrows have `>=0.12.0` (or whatever you need). That'll get us what we need as long as `conda-forge` is one of the channels in the env.  Interestingly, travis-37-locale doesn't have pyarrow listed at all (but the newest version on defaults is 0.16.0) Thanks!