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)
I suppose you had to change this because get_schema returns a list now where it was before one string? Would it be possible to keep it that way, or is that difficult? (it is a kind of API change if people would have been using that, although maybe not very likely). Eg just joining the elements of the string on ";\n"?