Added a semaphore which limits the number of simultaneous crawls which may occur
added timeout in processQueue to ensure starved hosts are cleaned up

When there are no new URLs being fed to the queue, the processQueue
loop will wait on the queue channel forever, which means freeIdleHosts
will never be called.
Merge branch 'loopfix'