code: func Merge(files ...Config) Config {
  	var a Config
  	for _, b := range files {
  		a = merge(a, b).(Config)
  	}
  	return a
  }
docs: // Merge recursively combines a set of config file structures into a single structure
  // according to the following rules:
  //
  // * only values of type struct, slice, map and pointer to simple types are allowed. Other types panic.
  // * when merging two structs the result is the recursive merge of all fields according to the rules below
  // * when merging two slices the result is the second slice appended to the first
  // * when merging two maps the result is the second map overlaid on the first
  // * when merging two pointer values the result is the second value if it is not nil, otherwise the first