Coroutines don't swap to themselves, publicly expose return stack
Bugfix: Make coroutines own the functions they run

Previously, if you spawned a coroutine with a temporary callable (e.g. a
lambda with capture), it could go away if it blocked. For example:

    int foo;
    A{ // Expands to: async::spawn_t(__r) << [&] {
        // OK. Nothing blocked yet, we're still in the full expression
        // where the lambda was created.
        foo = 1;
        asleep(1);
        // Not OK. When we blocked, control was returned to the caller
        // and it moved on. The lambda and its captures are gone.
        foo = 2;
    };

Now the coroutine owns what it calls so any captured variables stay
valid until it exits.

Thanks to Sam Epstein (@omni5cience) for help tracking this down.