Thread.Abort potential problems hopefully fixed.

Placed the most sensitive part - commit writing - into a finally block, which makes it
uninterruptible by Thread.Abort. Otherwise, an abort could leave a half-commit, since
DoRollback would not rollback what is already done. CloseTransaction() added to solve
the same problem with the three steps of closing a transaction, they must also be done
together. The library should now be resilient to Thread.Abort calls. Will write a test
to check.