Attempts to load the specified module.

        If successful, .loaded_modules[module_name] will be populated, and
        module_name will be added to the end of .module_ordering as well if
        it is not already present. Note that this function does NOT call
        start()/stop() on the module - in general, you don't want to call
        this directly but instead use reload_module().

        Returns True if the module was successfully loaded, otherwise False.

def load_module(self, module_name):
        """Attempts to load the specified module.

        If successful, .loaded_modules[module_name] will be populated, and
        module_name will be added to the end of .module_ordering as well if
        it is not already present. Note that this function does NOT call
        start()/stop() on the module - in general, you don't want to call
        this directly but instead use reload_module().

        Returns True if the module was successfully loaded, otherwise False.
        """
        if module_name in self.currently_loading:
            _log.warning("Ignoring request to load module '%s' because it "
                         "is already currently being loaded.", module_name)
            return False

        try: # ensure that currently_loading gets reset no matter what
            self.currently_loading.add(module_name)
            if self.loaded_on_this_event is not None:
                self.loaded_on_this_event.add(module_name)

            # Force the module to actually be reloaded
            try:
                _temp = reload(importlib.import_module(module_name))
            except ImportError:
                _log.error("Unable to load module '%s' - module not found.",
                           module_name)
                return False
            except SyntaxError:
                _log.exception("Unable to load module '%s' - syntax error(s).",
                           module_name)
                return False

            if not hasattr(_temp, "module"):
                _log.error("Unable to load module '%s' - no 'module' member.",
                           module_name)
                return False

            module = _temp.module
            if not issubclass(module, Module):
                _log.error("Unable to load module '%s' - it's 'module' member "
                           "is not a kitnirc.modular.Module.", module_name)
                return False

            self.loaded_modules[module_name] = module(self)
            if module_name not in self.module_ordering:
                self.module_ordering.append(module_name)
            return True

        finally:
            self.currently_loading.discard(module_name)