Reduce data loss in overflowing and ring channels.

Explicitly prefer to write out old data if available, rather than letting
Golang's scheduler choose whether to read or write. When both directions are
ready, a naive select block chooses randomly, which leads to unnecessary dropped
data 50% of the time.
Merge pull request #6 from eapache/fewer-discards

Reduce data loss in overflowing and ring channels.