This patch tries to implement RVO for coroutine's return object got from get_return_object.
From [dcl.fct.def.coroutine]/p7 we could know that the return value of get_return_object is either a reference or a prvalue. So it makes sense to do copy elision for the return value. The return object should be constructed directly into the storage where they would otherwise be copied/moved to.
I have tested folly and our internal workloads.
Since we've deleted the gro variable, we could remove GetReturnObjectManager.