code: function coerce(thenable) {
              var d = defer();
  
              // TODO: Enqueue this for future execution in 2.0
              try {
                  thenable.then(
                      function (value) {
                          d.resolve(value);
                      },
                      function (reason) {
                          d.reject(reason);
                      },
                      function (update) {
                          d.notify(update);
                      }
                  );
              } catch (e) {
                  d.reject(e);
              }
  
              return d.promise;
          }
docs: Assimilate an untrusted thenable by introducing a trusted middle man.
  Not a perfect strategy, but possibly the best we can do.
  IMPORTANT: This is the only place well.js should ever call an untrusted
  thenable's then() on an. Don't expose the return value to the untrusted thenable
  
  @param {*} thenable
  @param {function} thenable.then
  @returns {Promise}