Use channel instead of sync.Cond to wait for data transmission

The previous implementation using sync.Cond has data race and overly
complicated.  This new version using channel is more easier to follow.
Also we removed recover() code and wait for handler goroutines finish
so that writing to closed channel never happen.
Remove Expect header field
Use GMT instead of UTC in Date header field