Adds custom coroutines specifically for use within Actions. This
implements all features of the previous system, however, does not rely
on a separate executor to wake up continuations.
Note: since Actions are still ran by an executor and a small chance of
overlap exists the ActionCoroutine implementation uses atomic counters
and references.