There were two issues with the existing DEFINE_CLASS_#() macros. First,
the parent count was capped at 3 since every count needed a distinct
macroWhen originally implemented at 46ba7a35f2ea, the default for variables was `static`. SecondAs such `DECLARE_CLASS()` plus `DEFINE_CLASS_#()` were sufficient, many uses wanted the class variable to be overtly
static (private)since unless a `DECLARE_CLASS()` was encountered first the kobj would be static. Since that time the standards have changed and variables now default to extern.
A result of this is a proliferation of `static DEFINE_CLASS` and many instances of classes being declared without using the macros. This was further exacerbated by this not working for classes which had at least one parent. In light of this add `PUBLIC` and `PRIVATE` macro variants which allow overt declaration of static or extern.
By using __VA_ARGS__ and __VA_OPT__ there is no longer a need for a
a distinct macro for every parent count. This also allows for there to be single versions of public/private, instead of four copies of each.
Switch to deriving the base class list name from the class variable. This also allows for thereThe name is not required to be
a single static version of the macro a valid C identifier, whereas the class variable must be so. Also start using a designated
initializer for the main structureThere is no mention of a reason for this when it was implemented at 46ba7a35f2ea. This allows removing the workarounds added at 617994efc718 and 550d01a2117f.