function spread(value, fulfilled, rejected) {
    return Q(value).spread(fulfilled, rejected);
}
The spawn function is a small wrapper around async that immediately
calls the generator and also ends the promise chain, so that any
unhandled errors are thrown instead of forwarded to the error
handler. This is useful because it's extremely common to run
generators at the top-level to work with libraries.