Registers a new signal.

        :param signal: Unique name of the signal
        :param plugin: Plugin, which registers the new signal
        :param description: Description of the reason or use case, why this signal is needed.
                            Used for documentation.

def register(self, signal, plugin, description=""):
        """
        Registers a new signal.

        :param signal: Unique name of the signal
        :param plugin: Plugin, which registers the new signal
        :param description: Description of the reason or use case, why this signal is needed.
                            Used for documentation.
        """
        if signal in self.signals.keys():
            raise Exception("Signal %s was already registered by %s" % (signal, self.signals[signal].plugin.name))

        self.signals[signal] = Signal(signal, plugin, self._namespace, description)
        self.__log.debug("Signal %s registered by %s" % (signal, plugin.name))
        return self.signals[signal]