[#3229] Add DSLContext.transaction() to implement nested transaction semantics through functional interfaces