function Deferred(promise) {
    this.promise = promise;
    promises.set(this, promise);
    var self = this;

    var resolve = this.return;

    // Bind the resolver

    // Also support a new interface that hosts the resolver methods together,
    // as the singular analog of an asynchronous generator, or the asynchronous
    // analog of a singular setter.
    this.resolver = {};

    this.resolver.return =
    this.return =
    this.resolve = function (value) {
        resolve.call(self, value);
    };

    var reject = this.throw;
    this.resolver.throw =
    this.throw =
    this.reject = function (error) {
        reject.call(self, error);
    };

    this.in = this.resolver;
    this.out = this.promise;
}
Returns a promise for the same value, except noting that it should be passed
by copy instead of by reference if it is transported to a remote promise.