docs: def addons(cls, recurse=True):
          """
          Returns a dictionary containing all the available addons
          for this mixin class.  If the optional recurse flag is set to True,
          then all the base classes will be searched for the given addon as well.
          
          :param      recurse | <bool>
          
          :return     {<str> name: <variant> addon, ..}
          """
          cls.initAddons()
          prop = '_{0}__addons'.format(cls.__name__)
          out = {}
  
          # lookup base classes
          if recurse:
              for base in cls.__bases__:
                  if issubclass(base, AddonManager):
                      out.update(base.addons(recurse))
  
          # always use the highest level for any given key
          out.update(getattr(cls, prop, {}))
          return out