Detect stack context inconsistency in gen.Runner.

The existing checks in StackContext.__exit__ are run after the damage has
been done and may raise exceptions in the wrong place; gen.Runner
is a more reliable place to detect this problem.

Throwing the exception into the generator provides a better stack trace
for the problem and also simplifies some of the complexity of testing for
this feature.
gen: Defer creation of stack context until a YieldPoint is reached.

The runner alone can catch all necessary exceptions as long as Futures
are used; stack contexts are only needed for YieldPoints (especially
Callback/Wait; Task could be changed to use a local-only stack
context).

This is slightly backwards incompatible for code that assumes the existence
of a stack context without yielding anything.