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.

While the diff looks quite innocuous, it seems to break some tests in concurrent_test.py that seem to depend on _set_done() not catching callback exceptions. I am a bit mystified, and would appreciate more input :)