Add zmq socket abstraction

And zmq_sub would return it so that caller can utilise its send_event api

@lxyu