Thread pool functions

The library provides the following thread pool functions:

Initializes the pool context. Returns a thread pool handle (tpp) that's used to start the thread pool.
Start the thread pool. This function may or may not return, depending on the flags passed to thread_pool_create().
Destroy a thread pool.
Control the number of threads.
Note: In the example provided in the multithreaded resource managers section, thread_pool_start(tpp) never returns because we set the POOL_FLAG_EXIT_SELF bit. Also, the POOL_FLAG_USE_SELF flag itself never returns, but the current thread becomes part of the thread pool.

If no flags are passed (i.e., 0 instead of any flags), the function returns after the thread pool is created.