docs: function mix(self, ref, expanded) {
  	switch (typeof(ref)) {
  		case 'undefined': return self;
  		case 'function': return expanded ? ref : undefined;
  		case 'object':
  			if (isValueObject(ref)) return (ref !== null) ? ref.valueOf() : null;
  			if (expanded && ((ref instanceof Promise) || (self instanceof Promise))) return ref;
  			if (typeof(self) != 'object' || isValueObject(self)) self = {};
  			Object.keys(ref).forEach(function(key) {
  				self[key] = mix(self[key], ref[key], expanded)
  			})
  			return self
  	}
  	return ref;
  }