Fixed declaration of changeTarget in main() so the damn thing
WOULD COMPILE!
Added functions to count actual number of concurrent requests (including those waiting!)
Simplified and solved problem of waiting for all goroutines to finish.
Made makeRequestAndGetResponse a closure within another function,
setupRequestAndReplyFunc (that also gets rid of globals, btw).
Using sync.Mutex for concurrency control to important counter, the # of concurrent requests
at any given time. Also go fmt'd the code.
Put randomSleep in a separate package, called waiting. Also go fmt'd the code.
Solved the problem of waiting for goroutines--count routines when they finish, not by the
index that invokes them and use a channel read at the very end to block until they all
finish; also protect writes to the log with a one item long semaphore channel. And go fmt'd
the code