Use a StackContext to allow exceptions thrown from asynchronous functions
called by a generator to be caught normally.

Closes #405.
Closes #411.

Conflicts:

	tornado/gen.py
	tornado/test/gen_test.py
Allow exceptions thrown in the first (synchronous) phase of a gen.Task
to be caught by the generator.

Conflicts:

	tornado/gen.py
	tornado/test/gen_test.py