lib/perform.js
function() {
  var dfd = this;
  // since people might be used to .promise()
  var promise = function(){
    return promise;
  };
  promise.done = stackNFire( 'done', dfd );
  promise.fail = stackNFire( 'fail', dfd );
  promise.progress = stackNFire( 'progress', dfd );
  promise.state = dfd.state;
  return promise;
}
function() {
  var dfd = this;
  // since people might be used to .promise()
  var promise = function(){
    return promise;
  };
  promise.done = stackNFire( 'done', dfd );
  promise.fail = stackNFire( 'fail', dfd );
  promise.progress = stackNFire( 'progress', dfd );
  promise.state = dfd.state;
  return promise;
}
promise generator - psuedo read-only