Add ability to bind a random port

This was already possible, however, the bound port was nowhere to be
found except by reflecting through private objects.

I passed on the port from the lowest level up to the highest one and then added the BindRandomPort method which adds :0 automatically to the passed address (is the ZMQ convention is to do bind_random_port("tcp://*"); and then returns the port, as bind_random_port does in the C API