Refactor init for Excel readers to _BaseExcelReader
State: closed

Pre-cursor for #25092. To support multiple excel readers the init function is moved to _BaseExcelReader. The function is made a bit more general to be able to support multiple excel readers.

- [ ] tests passed
- [ ] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry


Labels:
name: IO Excel
description: read_excel, to_excel

Comments:
looks good. ping when ready. cc @WillAyd 
@jreback, @WillAyd, I don't understand the test failing tests, but other than that I think it's ready
@tdamsma restarted all of them. Not sure what is wrong with the checks_and_doc job off the top of my head but looks like this PR introduced some regressions with handling of S3 excel files as shown in the Travis failures. 

If you could take a look would be great
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=h1) Report
> Merging [#26233](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/9feb3ad92cc0397a04b665803a49299ee7aa1037?src=pr&el=desc) will **decrease** coverage by `0.01%`.
> The diff coverage is `90.32%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/26233/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #26233      +/-   ##
==========================================
- Coverage   91.97%   91.96%   -0.02%     
==========================================
  Files         175      175              
  Lines       52368    52376       +8     
==========================================
+ Hits        48164    48166       +2     
- Misses       4204     4210       +6
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.51% <90.32%> (-0.01%)` | :arrow_down: |
| #single | `40.69% <29.03%> (-0.15%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/io/excel/\_xlrd.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2V4Y2VsL194bHJkLnB5) | `94.54% <100%> (+0.6%)` | :arrow_up: |
| [pandas/io/excel/\_base.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2V4Y2VsL19iYXNlLnB5) | `92.13% <86.36%> (-0.72%)` | :arrow_down: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `78.94% <0%> (-10.53%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `96.9% <0%> (-0.12%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26233?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/pandas-dev/pandas/pull/26233?src=pr&el=footer). Last update [9feb3ad...903b188](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=h1) Report
> Merging [#26233](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/9feb3ad92cc0397a04b665803a49299ee7aa1037?src=pr&el=desc) will **decrease** coverage by `68.95%`.
> The diff coverage is `31.25%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/26233/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=tree)

```diff
@@             Coverage Diff             @@
##           master   #26233       +/-   ##
===========================================
- Coverage   91.97%   23.01%   -68.96%     
===========================================
  Files         175      175               
  Lines       52368    52377        +9     
===========================================
- Hits        48164    12055    -36109     
- Misses       4204    40322    +36118
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `?` | |
| #single | `23.01% <31.25%> (-17.83%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/io/excel/\_xlrd.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2V4Y2VsL194bHJkLnB5) | `23.21% <30%> (-70.73%)` | :arrow_down: |
| [pandas/io/excel/\_base.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2V4Y2VsL19iYXNlLnB5) | `27.94% <31.81%> (-64.91%)` | :arrow_down: |
| [pandas/io/formats/latex.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvbGF0ZXgucHk=) | `0% <0%> (-100%)` | :arrow_down: |
| [pandas/io/sas/sas\_constants.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL3Nhcy9zYXNfY29uc3RhbnRzLnB5) | `0% <0%> (-100%)` | :arrow_down: |
| [pandas/core/groupby/categorical.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZ3JvdXBieS9jYXRlZ29yaWNhbC5weQ==) | `0% <0%> (-100%)` | :arrow_down: |
| [pandas/tseries/plotting.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL3RzZXJpZXMvcGxvdHRpbmcucHk=) | `0% <0%> (-100%)` | :arrow_down: |
| [pandas/tseries/converter.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL3RzZXJpZXMvY29udmVydGVyLnB5) | `0% <0%> (-100%)` | :arrow_down: |
| [pandas/io/formats/html.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvaHRtbC5weQ==) | `0% <0%> (-99.37%)` | :arrow_down: |
| [pandas/core/apply.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvYXBwbHkucHk=) | `0% <0%> (-98.62%)` | :arrow_down: |
| [pandas/io/formats/csvs.py](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2Zvcm1hdHMvY3N2cy5weQ==) | `0% <0%> (-98.2%)` | :arrow_down: |
| ... and [140 more](https://codecov.io/gh/pandas-dev/pandas/pull/26233/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26233?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/pandas-dev/pandas/pull/26233?src=pr&el=footer). Last update [9feb3ad...1edae5e](https://codecov.io/gh/pandas-dev/pandas/pull/26233?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

lgtm. @WillAyd 
@WillAyd, I addressed the regression. Also I accidentally committed (and reverted) a setting to limit the test scope, that explains the codecov report.

Nice job @tdamsma - looking forward to the follow ups!
Great, thanks for the reviews