Replace classes with pytest in test_sql
A lot of this is very intertwined so hard to break up into small diffs.
The diff here is unfortunate, but I am not sure there is a lot that can be broken off piece-wise. 

With the new design, we have a lot more coverage of the different connection types, particularly when using engines directly (and have also uncovered some broken behavior). Total number of tests increase from 824 to 1449

There is still more that can be done to clean up the fixtures (in particular clean up standard vs iris vs type table requiring fixtures) but as is this should help us much more effectively onboard the ADBC drivers Might it be more digestible if one test class was broken down at a time? Even if that might mean there is duplication in code that setups & tearsdown db connections & data loading Hmm I'm not sure. I'll have to do another pass, but the hard part is that you end up with a lot of duplication in the intermediate state. Taking the first method of `TestSQLiteFallback` as an example:

```python
class TestSQLiteFallback(SQLiteMixIn, PandasSQLTest):
    """
    Test the fallback mode against an in-memory sqlite database.

    """

    flavor = "sqlite"

    @pytest.fixture(autouse=True)
    def setup_method(self, iris_path, types_data):
        self.conn = self.connect()
        self.load_iris_data(iris_path)
        self.load_types_data(types_data)
        self.pandasSQL = sql.SQLiteDatabase(self.conn)

    def test_read_sql_parameter(self, sql_strings):
        self._read_sql_iris_parameter(sql_strings)
```

We would have to duplicate load_iris_data, load_types_data and read_sql_iris_parameter just to get that one test to run. We would also have to reimplemnt connect, which in this case fortunately isn't that different from the `sqlite_buildin` fixture, but then puts us in a state where we have a fixture that does part of the setup/teardown and custom functions to do the rest.

In the current PR there is no intermediate state that mixes fixtures, functions and class-based setup - everything is managed via the fixture. Its a big diff but a cleaner end state

The issue with hanging now is from updating the fixture to test engines directly, not just connections. I did this in hopes of increasing test coverage but may just need to scale it back some more
 OK finally got rid of all the hanging behavior when using engine arguments directly. This should be good to go Very cool! It's a been a clean up that's long been needed