Version of plucking_task_vector where coroutine functionality is encapsulated in a module.

The coroutine::coroutine() function calls the provided function with
the given arguments, passing in a function called `coyield` which can
be used to communicate with the caller.  In the other direction, the
caller can call the function returned by coroutine::coroutine() to
communicate values in the other direction.