Use a barrier to make sure all threads have been created.

When using the pool for short-lived operations (i.e. to parallelize
some work and then throwing away the pool), it gets stuck at .stop()

This happens when the pool is stopped before all the threads have
called 'on_thread_start'.

request_stop(pool_size()) does not post an empty task to all threads
(those that are still 'coming to life' don't count in pool_size() yet).