zmq as socket layer

A singleton? I don't think so. Every instance of `zmq.Context` is a different object.
Of course it CAN be a global var and is thread safe. But attach unrelated sockets to the same context may course headache effects. When a context is terminated, all the sockets open within it should be destroyed