[WIP] Fix race between flush and Emit.

Emit() may be called from multiple goroutine.
flush() is also called from anther goroutine.
To protect buffer from race, single goroutine should handle all emit() and flush().

WIP: I have not run this code yet. Hopefully, I'll test in this week.
forward は request / response 型ではないので、コネクション閉じないとちゃんと送信したデータが最後まで相手に届いているかわからないです。
defer の順序的に、 Close() が終わってから flushWg.Done() が呼ばれることが保証されるようになります。