Returns the addon whose name matches the inputted name.  If
        the optional recurse flag is set to True, then all the base classes
        will be searched for the given addon as well. If no addon is found,
        the default is returned.
        
        :param      name    | <str>
                    recurse | <bool>
                    default | <variant>

def byName(cls, name, recurse=True, default=None):
        """
        Returns the addon whose name matches the inputted name.  If
        the optional recurse flag is set to True, then all the base classes
        will be searched for the given addon as well. If no addon is found,
        the default is returned.
        
        :param      name    | <str>
                    recurse | <bool>
                    default | <variant>
        """
        cls.initAddons()
        prop = '_{0}__addons'.format(cls.__name__)
        try:
            return getattr(cls, prop, {})[name]
        except KeyError:
            if recurse:
                for base in cls.__bases__:
                    if issubclass(base, AddonManager):
                        return base.byName(name, recurse)
        return default