Fix bugs and clean up pubsub-specific connections

The threads used to implement pubsub-specific connections
would sometimes interleave reads from the underlying
redis connection, causing corrupt replies to be read.
Packets coming from redis were also being parsed as many
times as the number of pubsub subscriptions.

This patch uses one receiver thread and replaces the
pubsub? field in redis-connection with a hash table
from topics to lists of async channels to which messages
about the key topic should be sent.