ENH: Pluggable SQL performance via new SQL `engine` keyword
- [x] xref, but is first step in implementing #36893
- [x] tests added and passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry (in the docstring)
- [ ] whatsnew entry (in the docs)

This is the first step in implementing an `engine` backend to the SQL I/O functions, as discussed in #36893. This PR is simply to refactor the existing SQLAlchemy parts to make them extensible for an external engine.

No new engines were added at this stage. No new tests were added, only verified that existing tests fail ("test behavior, not implementation" suggests that we don't need to test internal refactoring)

Lots of the code was borrowed from the Parquet I/O implementation.