code: function copyMetaFrom(source, target){
  
          mixinMeta.forEach(function(when){
              var mixinWhen  = source[when],
                  targetWhen = mixinWhen
  
              if (mixinWhen != null){
  
                  if (target){
                      targetWhen = target[when] = target[when] || {}
                  }
  
                  for (var key in mixinWhen) if (hasOwn(mixinWhen, key)){
                      targetWhen[key] = source[key]
                  }
              }
          })
  
          return target
  
      }
docs: /*
  For each $copyIf, $override, $before, $after, as WHEN, do the following:
  
  Iterate over source[WHEN], and for each property KEY in source[WHEN], copy source[KEY]
  to either target[WHEN][KEY] (if the target is given)
  or to source[WHEN][KEY]
  
  This function is called during the mixin process in 2 cases:
  
  1. when the source is the mixin prototype. Since all mixin methods have been copied on the prototype, where they have been
  enhanced so that they can use callSuper and callOverriden; now we need to copy all needed methods to mixin.$override, to mixin.$copyIf, etc
  
  2. when the source is the mixin class. Since all mixin methods have been copied as static methods on the class (where they have
  been enhanced so that they can use callSuper and callOverriden) now we need to build a statics mixin target, with the keys $override, $copyIf, etc...
  that are objects with key/value pairs, where the values are the functions copied from the Mixin Class.