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.
% basic
% unknown
*** [alias] unknown: command bargle is unknown
% ambiguous
*** [alias] ambiguous: command s is ambiguous
% recursive
*** [alias] recursive: circular dependency on recursive
adding foo
% with opts
C foo