Add implementation of worker pool, pulled from DatTCP

This adds an initial implementation of the worker pool. This logic
is pulled from DatTCP, but made into a generic component. It is
no longer tied to serving sockets, but generically processes
"work". This will allow applications to build worker pools based
on their needs and properly perform tasks using multiple threads.