Fix coroutine return type handling after deferring (#8741)
If a nested function definition was processed multiple times due to
deferring, its return type would be transformed from `T` to
`Coroutine[Any, Any, T]` each time. The flag `SemanticAnalyzer.deferred`
was checked to prevent this double processing, but it's reset (to false)
when the analyzer is restarted, so is not reliably usable here.
Fix by tracking which function definitions have had their return type
wrapped, in the mapping `SemanticAnalyzer.wrapped_coro_return_types`.
Fixes #7736