Starts read loop, new thread if async and
        connects/authenticates if not already running.

        :param async_: If True new thread is started

def start(self, async_=False):
        """Starts read loop, new thread if async and
        connects/authenticates if not already running.

        :param async_: If True new thread is started
        """
        if not self._running:
            self._connect()
            self.authenticate()
        if async_:
            t = threading.Thread(name=self.description, target=self._read_loop)
            t.daemon = False
            t.start()
        else:
            self._read_loop()