thread: Thread functions can be called with prop_mutex held
pool: Add a helper to iterate over all pool items
prop: Use a pool of threads to dispatch prop notifications from global courier

This reduces the number of thread that needs to sit around and idle waiting
for something to happen. It also makes stuff happening on the global dispatch
less sensitive for blocking callbacks