When originally implemented at 46ba7a35f2ea, the default for variables was static. As such DECLARE_CLASS() plus DEFINE_CLASS_#() were sufficient, 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 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. The name is not required to be a valid C identifier, whereas the class variable must be so. There is no mention of a reason for this when it was implemented at 46ba7a35f2ea. This allows removing the workarounds added at 617994efc718 and 550d01a2117f.