Lightweight coroutines for C++