In Python 3 every exception has an auto-attached __context__ exception if it was
raised while an existing exception was being handled. This is often a very
useful property and allows users to see the underlying cause of many problems.
However, when dealing with async code via coroutines this feature can suddenly
become a pretty big issue. Namely, if you generator.throw back into a coroutine
to raise an exception in the correct scope, and that coroutine raises an
exception at a later time you can have nested exceptions which shouldn't
logically be nested.
This patch resolves this issue in the coroutine code by moving the gen.throw
outside of the exception handler. By doing this the user-code scope is able to
later raise exceptions without worrying about inheriting prior exception
context.