code: function Parallel () {
    var actions = Array.prototype.slice.call(arguments);
    var tasksLeft;
  
    function _Parallel() {}
  
    function start() {
      tasksLeft = actions.length;
    }
  
    function done() {
      if (--tasksLeft === 0) {
        _Parallel.finish();
      }
    }
  
    function wait(action) {
      action.on('finish.parallel', function() {
        action.on('finish.parallel', null);
        done();
      });
    }
  
  
    _Parallel.enter = function() {
      start();
      for(var i = 0, len = actions.length; i < len; ++i) {
        var a = actions[i];
        if (a.enter) {
          if (a.enter()) {
            wait(a);
          } else {
            done();
          }
        }
      }
    };
  
    _Parallel.exit = function() {
      start();
      for(var i = actions.length - 1; i >= 0; --i) {
        var a = actions[i];
        if (a.exit) {
          if (a.exit()) {
            wait(a);
          } else {
            done();
          }
        }
      }
    };
  
    _Parallel.clear = function() {
      for(var i = 0, len = actions.length; i < len; ++i) {
        var a = actions[i];
        a.clear && a.clear();
      }
    }
  
    _Parallel = Action(_Parallel);
    return _Parallel;
  }
docs: / executes actions in parallel usage: Parallel(action1, action2, action3)  raises finish when all the tasks has been completed