Coroutine improvements:
- Yield-only coroutine (aka "generator") can now be iterated using range-based for. (Other coroutine types cannot as it makes no sense - they either do not return a value (nothing to iterate) or they require a value to be sent back (operator++ is insufficient and the call must be made explicitly by the user, not the compiler))
- Moved CoroutineState to a slightly more accessible location
- Added optional preprocessor macros to simplify working with coroutines: yield(), receive(), and yield_receive() depending on the type of coroutine being used.
- Added missing Yield() and Receive() static functions accepting move parameters. Coroutines had non-static functions for that, but the static ones were missing.