improve: coroutines now look just like normal functions:
hide generator-aware implementation details inside decorator