'send request, return Future()
Can block on network if request is larger than send_buffer_bytes'

def send(self, request):

    future = Future()
    if self.connecting():
        return future.failure(Errors.NodeNotReadyError(str(self)))
    elif (not self.connected()):
        return future.failure(Errors.ConnectionError(str(self)))
    elif (not self.can_send_more()):
        return future.failure(Errors.TooManyInFlightRequests(str(self)))
    return self._send(request)
