A thread pool is an object that maintains a pool of worker threads to
perform time consuming operations in parallel. It assigns jobs to the
threads by putting them in a work request queue, where they are picked
up by the next available thread. This then performs the requested
operation in the background and puts the results in another queue.

The thread pool object can then collect the results from all threads
from this queue as soon as they become available or after all threads
have finished their work. It's then possible to define callbacks to
handle each result as it comes in.

NOTE: This module is regarded as an extended example, not as a
finished product. Feel free to adapt it too your needs.
