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)
That's good point --- meta does not seem to reflect database tables automatically . A more accurate description of the tricky situation is the one at the bottom of the test called `test_schema_support`.  You see that there is one metadata object that is created and passed into multiple `to_sql` calls.  If `_create_table_setup` adds a table to that metadata object, then it will fail on the second call (since the table already exists in that metadata object).  
The reason this is arising now, and wasn't before, is that I'm now handling the `if_exists` flag in `insert` rather than the constructor, since presumably we want to be able to create a `PandasSQLTable` object regardless of whether the table already exists in the database or not (for example, to then call `sql_schema` on the object).