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)
You are right it seems a bit different for different drivers.
However, it seems both sqlite3 support the paradigm:
```python
with conn as a:
  a.execute('blah')
```
as a way to run a transaction.

see:
https://docs.python.org/2/library/sqlite3.html#using-the-connection-as-a-context-manager
http://stackoverflow.com/questions/15568137/is-enter-and-exit-behaviour-for-connection-objects-specified-in-the-pyth