Decouple xlrd reading from ExcelFile class
To support community engagement on #11499 I figured it was worth refactoring the existing code for read_excel which very tightly couples xlrd. 

There are quite a few ways to go about this but here I am creating a separate private reader class for the xlrd engine which gets dispatched to for parsing and metadata inspection. In theory a similar class could be made for openpyxl.

I didn't make a base class here to keep diff minimal though I certainly could if we see a need for it