The mux listener was handling connections and demux serially. This could cause
issues if one handler was slow or blocked. For example, if a node had many
hinted handed writes queued for a down node, when the down node was started, it
would start handling the write requests (possibly before it had synchronized with
the cluster). This would cause the connectiosn to block and also prevent the cluster
synchronization from occuring because they both use the same mux listener.
Fixes#3960
This commit adds tcp.Mux which multiplexes connections over TCP using
the first byte as the header byte. Users can listen to the muxer
using mux.Listen(hdr) and obtain a net.Listener.