Enhancement propositions for ZeroMQServer

This changes try to add more flexibility to the `ZeroMQServer` by allowing passing a `context` or a `socket` object.

Moreover the context at the module level has been removed since it `zmq.Context` is not threadsafe so this can lead to errors to use at module level.

Finally I added a `ZeroMQServer` implementation allowing async calls. Basically two calls to a blocking method (lets say something like time.sleep(3)) will be executed at the same time in different threads.