TransactionStatus now has value semantics and uses a shared_ptr to heap allocated state. This is safer and enables conditional waiting.