return traceback and error for failed tasks

When a task fails, the error and traceback can be returned, and are useful to have in the result

Also, I've changed `setup.py` to explicitly list the packages to install (so the `tests` and `examples` packages aren't installed)