Check for transaction before committing or rolling back

In `.renameColumn` (and probably elsewhere), some commands are run in the promise chain before `.ensureTransaction`; in certain cases, these may fail, in which case the `.catch` handler attempts to roll back the transaction when it doesn't exist. This causes a useless error to be thrown about a transaction as opposed to the error that actually caused the problem (for example, column name doesn't exist in table)
Now I see why '.beginTransaction' may not have been there before; I need to understand the structure better.

`TypeError: Object #<Runner_SQLite3> has no method 'beginTransaction'`

I think the solution here is to make sure beginTransaction exists, rather than hack around it by sending raw sql (and subsequently adjusting `this.runner.transaction` - I've found it really hard to follow the code flow, can you point me in the right direction?