deliver the notification with ability to switch to the coroutine
support for symmetric transfer
Returns
return value must be used in await_suspend() - (otherwise the notification can be lost). This allows to transfer from current coroutine to resuming coroutine. If the awaiter is not coroutine, the function simply delivers to notification and return noop_coroutine()