fix data races and turn on race detector by default.

In #309, we ended up with using ``sync.Cond``, which introduced the data race again.

In this PR, I use channel instead of ``sync.Cond`` similar to the first commit in #309. The difference is that instead of using close() to broadcast, I used the send operation.
Indeed the example at the end of:

http://stackoverflow.com/questions/15945030/change-values-while-iterating-in-golang

Seems to indicate that this is true, '&manifest' is going to be constant for all iterations of the loop.