public void Do(IRevertableAction action)
        {
            if (finished)
                throw new InvalidOperationException ("Transaction has already finished, start a new transaction");
            if (canceled)
                throw new InvalidOperationException ("Transaction has already been canceled");

            actions.Add (action);
        }
        private bool onActionFailed(IRevertableAction action)
        {
            //TODO change the event args so user can canel it
            var handler = ActionFailed;
            if (handler != null)
                handler (this, EventArgs.Empty);

            return true;
        }