Registers the given plugin instance to this system.  If a plugin with
        the same name is already registered, then this plugin will not take
        effect.  The first registered plugin is the one that is used.
        
        :param      plugin | <Plugin>
        
        :return     <bool>

def register(cls, plugin):
        """
        Registers the given plugin instance to this system.  If a plugin with
        the same name is already registered, then this plugin will not take
        effect.  The first registered plugin is the one that is used.
        
        :param      plugin | <Plugin>
        
        :return     <bool>
        """
        plugs = getattr(cls, '_%s__plugins' % cls.__name__, None)
        if plugs is None:
            cls.loadPlugins()

        plugs = getattr(cls, '_%s__plugins' % cls.__name__, {})

        if plugin.name() in plugs:
            inst = plugs[plugin.name()]

            # assign the plugin instance to the proxy
            if isinstance(inst, PluginProxy) and \
                    not isinstance(plugin, PluginProxy) and \
                    not inst._instance:
                inst._instance = plugin
                return True

            return False

        plugs[plugin.name()] = plugin
        setattr(cls, '_%s__plugins' % cls.__name__, plugs)
        return True