Reuse ZeroMQChannels

Cache the sreq inside the zmqchannel instead of caching the entire channel object.

This is an improvement over #10332 in that you don't have to worry about someone creating a ZeroMQChannel then forking (thereby breaking the per-thread, per-pid rules). This way once it moves it will create a new sreq as needed.