Load the specified plugin

        :param p: The plugin to load
        :type p: Subclass of JB_Plugin
        :returns: None
        :rtype: None
        :raises: errors.PluginInitError

def load_plugin(self, p):
        """Load the specified plugin

        :param p: The plugin to load
        :type p: Subclass of JB_Plugin
        :returns: None
        :rtype: None
        :raises: errors.PluginInitError
        """
        if p.is_loaded():
            return
        # load required plugins first
        reqnames = p.required
        reqplugins = []
        for name in reqnames:
            try:
                reqplugins.append(self.__plugins[name])
            except KeyError as e:
                log.error("Required Plugin %s not found. Cannot load %s." % (name, p))
                raise errors.PluginInitError('Required Plugin %s not found. Cannot load %s. Reason: %s' % (name, p, e))
        for plug in reqplugins:
            try:
                self.load_plugin(plug)
            except errors.PluginInitError as e:
                log.error("Required Plugin %s could not be loaded. Cannot load %s" % (plug, p))
                raise errors.PluginInitError('Required Plugin %s could not be loaded. Cannot load %s. Reason: %s' % (plug,p, e))
        # load the actual plugin
        p._load()
        log.info('Initialized the plugin: %s' % p)