2.0.0 fix retries operations

Fix retry operations when the cluster is recofigured or when the connection is reset even when authentication is on
Hi @matsimitsu,

I set up a mongod with SSL and was able to reproduce the problem.
Following the instructions on [Kernel::select doc](http://www.ruby-doc.org/core-2.1.3/Kernel.html#method-i-select) changed the code to the version bellow.
Can you test on your server before I commit it, please?

```
  def read_data(socket, length)
      # Block on data to read for op_timeout seconds
      time_left = op_timeout = @options[:op_timeout] || timeout
      begin
        raise Errors::OperationTimeout.new("Took more than #{op_timeout} seconds to receive data.") if (time_left -= 0.1) <= 0
        data = socket.read_nonblock(length)
      rescue IO::WaitReadable
        Kernel::select([socket], nil, [socket], 0.1)
        retry
      rescue IO::WaitWritable
        Kernel::select(nil, [socket], [socket], 0.1)
        retry
      rescue SystemCallError, IOError => e
        raise Errors::ConnectionFailure.new("Attempted to read #{length} bytes from the socket but an error happend #{e.message}.")
      end

      if data.length < length
        data << read_data(socket, length - data.length)
      end
      data
    end
```