Add callback error handling to Future

Catches and logs to the application log exceptions raised by each callback. This
more or less mirrors what concurrent.futures.Future does.
Capture stack context in gen.engine's wrapper function.

This was an error that went unnoticed in earlier versions
because Futures passed through exceptions in their callbacks.
Merge commit 'f40d39b'