Modify builder test to use semaphore correctly

ref: http://golang.org/doc/effective_go.html#channels and
     http://golang.org/ref/mem#tmp_6

When buffered channels are used as counting semaphores...
- send (c <- _) == acquire
- receive (_ <- c) == release

This has the side-effect of the length and capacity of the channel
representing the queue length and capacity of the semaphore.