no need to use co_return at the end of a coroutine which returns
future<>. despite that this does not incur performance penalty,
because:
co_await func() // func returns future<>
returns void
co_return is called with void operand, this statement is lowered to
promise.return_void()
and a bare "co_await func()" also calls return_void(). so they are
equivalent at runtime. but the extraneous co_return can be dispensed.
also take this opportunity to remove the bare co_return at the end
of a coroutine. it's unnecessary just like a `return` at the end of
a function returning `void`.