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.
# should print nothing# should print ? b/x? b/x# should print A b/xA b/x# should forget b/xforgetting b/x# should print nothing