README.md: switched header type; switched to fenced code blocks.
Client.rb: added dedicated message-handler thread to prevent deadlocks

This ensures that we're always able to respond to incoming messages, even
when all other threads are busy in a message-wait.
MessagePasser: clarify exception raised when data cannot be dumped
MessagePasser#send_message: raise error if called when connection closed

Previous behavior was to silently ignore the call.
MessagePasser#enqueue_waiter: fix for Ruby 2.x+ compatibility

As the included comment suggests, the old behavior when checking for
already-received messages matching the given options was to dive into
the internals of Ruby standard-library class Queue.  Not only was this a
big No-No in terms of respecting Queue's encapsulation boundaries, it also
stopped working.  Oops.
MessagePasser: add message separator for better fault tolerance.
MessagePasser: fix typo in declaration of instance var `@receive_thread`