This PR adds a ThreadPool owned by the EventLoop, enabling any server connection to dispatch work to a shared pool. The ThreadPool is tested with callbacks and recursive IPC calls.
Motivation
- Reduces boilerplate for non-libmultiprocess clients that don't need control over where work executes on the server (similar goal to #283).
- Provides a straightforward way to cap the server's total thread count.
Difference from #283
Unlike the approach in #283, external clients don't need to send a pool creation request — the pool is available server-wide from the start. This lays groundwork for a future where ThreadMap access is restricted to privileged connections only.
Draft while I finish testing and gauge interest in a server-wide ThreadPool.