Rollback transactions when handling exceptions.

So, I was looking over the source code and noticed that transactions don't seem to get rolled back if an exception is thrown.  

The way it's written it's not clear if an exception will result in a commit or rollback.  Though it is generally discouraged in Objective C, some people do rely on exceptions.  This pull request forces a roll back in the event of an exception.