Openpyxl engine for reading excel files
- [x] closes #11499
- [x] tests added 
- [x] tests passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Builds upon #26233, so that should be merged first.

This PR adds an almost fully compatible OpenPyXL based engine to excel_read, next to the xlrd engine.

Using OpenPyXL will also allow reading and writing in excel tables referenced by name which I intend to put in a future PR, see also discussion of #24862.

As the current xlrd implementation is pretty tightly coupled to the the text based parsing options, there are many supported keywords in excel_read that I think eventually do not belong there. With this PR I left all of them in and support them as much as possible even though this:

 - Make the code much more complicated
 - Makes the code slower
  
The way this is implemented is that the excel file is read into a dataframe early, and all the keywords like `convert`, `dtype`, `convert_float` etc are dealt with by modifying the dataframe. Because of this some of the parser code needed to be re-implemented, so this is not ideal. An alternative would be to just not support these keywords at all for the openpyxl engine.