Refactor connection handling

Work in progress, just getting my travis on.

This PR should solve issues with transactions setting up too many connections, transaction not closing their connections and other stuff.

This PR should also help make the connnection codebase more understandable and more general per dialect.
Not in this PR specifically no. My thinking is after we merge this PR i'll add connection hooks and then we'll move timezone query generation to the query generators and then run those via sequelize.query on a afterConnect hook.