docs: function stateHandler(action,state,fn){
                          return function(){
                            if(!su.isFunction(fn)) return self[action](defer[state]); 
                            else{
                              var returned = fn.apply(this,arguments);
                              if(returned && isPromise(returned) && !isp){ 
                                returned.promise().then(defer.resolve,defer.reject,defer.notify);
                                isp = true;
                              }
                              else{
                                defer[state+"With"](this === self ? defer : self,[returned]);
                              }
                            }
                          }
                        }