begin fixed thread processing model

Instead of instantiating a new thread for each incoming http
request, keep a pool of threads and let them feed from a
shared request queue. New threads can be added (limited
to some maximum) as things get busy.