test: race condition in test-cluster-disconnect

The test was not waiting for all the worker-created sockets
to be listening before calling cluster.disconnect().
As a result, the channels with the workers could get closed
before all the socket handles had been passed to them, leading
to various errors.
lib: raise 'disconnect' event on channel close

When a child process closes the channel to the parent, we should
call _disconnect(), which raises the 'disconnect' event immediately,
rather than disconnect(), which can potentially be deferred if
there is a handle queue on the channel. A deferred disconnect would
never be processed because the other side is gone and the channel
will never be drained.
Merge commit '7d0e06cf8be2591f3eeac66f280c74cc1f5fe406' into orangemocha-testing