Don't close channels being written to.

This avoids a panic on writing to a closed channel by having a channel
open only for signaling shutdown.  Read and Write both observe this
channel and will teardown when it's closed.

We still allow multiple Close() calls and recover if Closed more than
once.

[Cherry picked/fixed up patch]