add WorkerPool.wait() for convenience
add test to make sure our concurrency stuff plays nice with generators
capture exceptions in worker processes
major remodeling of bw_apply