transactions: avoid late tear-down (issue641)
We use weak references (ugh) to avoid having to manually delete
transaction references out of each call frame when an exception occurs.
abort: repository a not found!
255
abort: error: Connection refused
255
abort: repository a not found!
255
abort: destination '../a' already exists
255
abort: repository a not found!
255
destination directory: q
abort: destination 'q' already exists