Initial commit

Porting all the code from Qiita and extending the tests.
the try/except and context is simplified if the execution method is set outside of the try. It would be nice to set this outside of the context as well but that gets dirtier

```python
execute = partial(cur.executemany if many else cur.execute, sql, sql_args)
```