unix: implement a better threadpool

Split the threadpool in two: a small one for CPU-bound workloads and
a large one for I/O-bound workloads.

The CPU threadpool has approximately as many threads as there are CPUs
in the machine.

The I/O threadpool can have hundreds of threads, which is okay because
they should mostly be blocked in system calls.

I/O threads run on a reduced stack (32 kB) to avoid using up too much
virtual address space on 32 bits architectures.