Update the protocol to allow the same process to be a client and a server.

The previous design had the server associate 'subscriptions' with
a client-provided identity token. Instead we move to a more stateless
model where each client thread provides a list of the queue names
it's interested in. This avoids two threads from the same process
getting mixed up and seeing each-other's messages.

Fixes #2

Signed-off-by: David Scott <dave.scott@eu.citrix.com>