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

Closes #8097

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)
Hmm, this seems a bit different for the different drivers.

sqlite3 returns a connection from the context manager, but has a `connection.executemany`, so that of course works (otherwise the tests would not pass at all) 
pymysql returns a cursor, but does not close that cursor automatically (I don't know if this is a problem)
MySQLdb does now support such a context manager (from 1.2.5), and does the same as pymysql 
mysql.connector does not support it, so the current implementation fails with that.