docs: function chain(promiseOrValue, resolver, resolveValue) {
              var useResolveValue = arguments.length > 2;
  
              return well(promiseOrValue,
                  function (val) {
                      val = useResolveValue ? resolveValue : val;
                      resolver.resolve(val);
                      return val;
                  },
                  function (reason) {
                      resolver.reject(reason);
                      return rejected(reason);
                  },
                  function (update) {
                      typeof resolver.notify === 'function' && resolver.notify(update);
                      return update;
                  }
              );
          }