Add a poller to the BlockingConnection to address latency issues detailed in #242

The poller checks to see if there is data on the socket to read, before calling the read method, removing blocking reads with no data on the stack from holding up other operations.