BUG: Delegate more of Excel parsing to CSV
The idea is that we read the Excel file, get the data, and let the `TextParser` handle reading and parsing, or at least most of it.  We shouldn't be doing a lot of work that is already defined in `parsers.py`

In doing so, identified several bugs:

* `index_col=None` was not being respected

* `usecols` behavior was inconsistent with that of `read_csv` for list of strings and callable inputs

* `usecols` was not being validated as proper Excel column names when passed as a string.

Closes #18273.
Closes #20480.

With regards to the latter issue, I believe this PR is a cleaner implementation that integrates the new `usecols` functionality without having to introduce a new parameter.