Consolidate implementations of gen.engine and gen.coroutine.

The shared implementation is nearly identical to the old gen.coroutine,
with a small tweak for the callback argument.
gen.Runner now communicates back to the decorator via a Future instead of a callback.

This allows for failures to be reported without relying on stack_context.