added BeforeMessageAck event
moved handling of deferred commits into a UnitOfWork object