Fix to merge code from `_create_table_statement` and `get_schema`

Reorganized a lot of the SQL schema creation code.  Now database table is not dropped / create when `PandasSQLTable` object is instantiated, but instead when `insert` method is called on it.  This allow us to `get_schema` to generate `CREATE TABLE` code without actually creating the table.
(Includes updates from #8083, so will have to be rebased when that is merged)
The situation I am thinking of (and that actually appears in the tests) is the following:
You call `get_schema` on some dataframe and with name `test` --- but, importantly, there already exists a table in the database called `test`.  `get_schema` calls `_create_sql_schema` which creates an instance of `PandasSQLTable` (calling `_create_table_setup` in its constructor) and then calls that object's `sql_schema` method.
If I don't create a new MetaData object in `_create_table_setup`, then `_create_table_setup` throws an error, saying `test` already exists in `self.pd_sql.meta`