Allow actions to be attached to transactions
This branch allows runnable actions to be attached to a DB transaction. The actions are run on the EventExecutor when the transaction is committed. Events/actions are broadcast/run in the order they were attached.
This makes it possible to query the DB and post the result back to the caller asynchronously, while guaranteeing that the result will arrive in the correct order with respect to any other results or events from the DB.