bugfix: ThreadPool.Terminate() does not wait for threads to finish

Your project looks very interesting so I thought I'd grab a bug and help out :)

This should be a drop-in fix/replacement. All the previous tests pass and I added some extras. I did have to comment out a few lines from the previous test because it was accessing the (private) task queue which isn't accessible anymore (even from within the package).

I added some extra stuff in there too to prevent bad things from happening if Start or Terminate are called multiple times.

It's getting late here, so I'm gonna go crash but I can provide some other details later if you'd like.