do not use callbacks to handle replies

Replies are received in unpredictable order on the socket, but this doesn't
mean that we need to use callbacks.  The listener thread now only stores
expected replies.  Any request is now blocking.  The advantage is that we
can use exceptions and return values as usual.

It also didn't seem to be wise to allow a client to make simultaneous requests
without waiting for reply.
send chat stanza, do not wait for reply