docs: def makeForwardingMetaclass(forwarding_dest_getter, whitelist, base_class=object):
      """
      makes a metaclass that overrides __getattr__ and __setattr__ to forward some
      specific attribute references to a specified instance variable
      """
      class ForwardingMetaclass(base_class.__class__):
          def __init__(metaself, name, bases, dct):
              # print('ForwardingMetaclass.__init__():
              #  {forwarding_dest_getter: %r; whitelist: %r}' % (forwarding_dest_getter, whitelist))
              super(ForwardingMetaclass, metaself).__init__(name, bases, dct)
              old_getattr = metaself.__getattribute__
              old_setattr = metaself.__setattr__
              def new_getattr(self, item):
                  if item in whitelist:
                      #dest = old_getattr(self, forwarding_dest_name)
                      dest = forwarding_dest_getter(self)
                      try:
                          val = dest.__class__.__getattribute__(dest, item)
                      except AttributeError:
                          val = getattr(dest, item)
                  else:
                      val = old_getattr(self, item)
                  return val
              def new_setattr(self, name, val):
                  if name in whitelist:
                      #dest = old_getattr(self, forwarding_dest_name)
                      dest = forwarding_dest_getter(self)
                      dest.__class__.__setattr__(dest, name, val)
                  else:
                      old_setattr(self, name, val)
              metaself.__getattribute__ = new_getattr
              metaself.__setattr__ = new_setattr
      return ForwardingMetaclass