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)
But the table is not yet reflected in the meta. Where would it be reflected? It gets only reflected in read_sql_table (and in drop, but that is to remove it). This 'create' is in principle only called when you want to write data if the table does not yet exist, or when it exist and you want to replace it, but then the table is already dropped.


BTW, you can specify it via keyword in the creation of the Table what has to happen if it already exists.