Circular references in gen.Runner and stack_context.ExceptionStackContext

I have a problem with Tornado and big data processing. Take a look at this code:

```python
from tornado import web, ioloop, gen

class MainHandler(web.RequestHandler):
    @web.asynchronous
    @gen.engine
    def get(self):
        self.write("Hello, world<br>")
        yield gen.Task(self.some_task, "0123456789" * 100 * 20000)
        self.finish()

    def some_task(self, bigdata, callback):
        self.write("some task<br>")
        callback()

application = web.Application([
        (r"/", MainHandler),
    ],
    debug=True,
)

if __name__ == "__main__":
    application.listen(8888)
    ioloop.IOLoop.instance().start()
```

Almost each time after request python increase memory usage by 20Mb (`"0123456789" * 100 * 20000`) and stay hold it until next garbage collection. This happen because `Runner` instance has reference to last running task after engine stop. I fix it and add regression test.