Initialize can now be called several times
EventStoreSendMessages reused
implements the contract:

if context has current transaction
    send using current transcation
else
    start new transaction
    attach to commit/rollback/cleanup events
    send using the transaction
    stash the transaction in the context