test_zmq: use unix socket instead of tcp

Simply avoid binding to an already used port.
Print correctly zmq identity when debugging.
Fix flickering unit test

HeartBeatOnChannel raises exceptions directly to its parent's coroutine
so it needs to run in the same coroutine as the test server/client.
Fix a really stupid and old bug.

 - server side, you accept a new channel
 - you stack an heartbeatonchannel on top
 - you slow everything enough so the client already sent some heartbeat
   msgs before you could read the first msg (cpu intensive task,
   time.sleep...)
 - you send back the response
 - you close the heartbeatonchannel
 - this kills the coroutine handling the heartbeat
 - this action eventually switch to the hearbeat coroutine to raise
   GreenletExit in it.
 - which after might ends up to the recver coroutine (not yet killed)
 - the recever coroutine gets the heartbeat msg from the client
 - and stupidly process to spawn a new heartbeat coroutine!
 - this eventually switch back to the close()
 - which set the self._heartbeat to None (so potentially another
   heartbeat msg could spawn another heartbeat coroutine!)
 - after enough back and forth, self._channel is set to None
 - one or more of the heartbeat coroutines is trying to access
   self._channel.emit... and BOOM, you get (an harmless) stacktrace in
   the logs.

The solution is to set a flag when close() is called: self._close =
True.

_start_hearbeat() called from the recver coroutine can then check this
flag.

Last but not least, the heartbeat coroutine checks this flag before
killing the parent coroutine. This is not strictly necessary, but if in
the future the code in close() eventually yields back to gevent (for
example, by trying to kill another coroutine before the heartbeat's
one), this will prevent a LostRemote to be raised on close().

And finally, a forgotten variable was removed (in channel.py).