async bufferSend(topic, data) {
    this.buffer.push({ data, topic });

    if (this.state === STATE.SENDING) {
      return;
    }

    this.state = STATE.SENDING;

    do {
      const _buffer = this.buffer;
      this.buffer = [];

      for (let i = 0; i < _buffer.length; i++) {
        const payload = _buffer[i];
        // This method will never return a rejected promise
        // http://zeromq.github.io/zeromq.js/classes/publisher.html#send
        await this.socket.send([payload.topic, payload.data]);
      }
    } while (this.buffer.length > 0);

    this.state = STATE.READY;
  }
Sends the provided message, and then sends all pending ones waiting in
the buffer, in order

@param  {string} topic
@param  {Buffer} data
@return {void}