code: func Flatten(thing map[string]interface{}) Map {
  	result := make(map[string]string)
  
  	for k, raw := range thing {
  		flatten(result, k, reflect.ValueOf(raw))
  	}
  
  	return Map(result)
  }
docs: // Flatten takes a structure and turns into a flat map[string]string.
  //
  // Within the "thing" parameter, only primitive values are allowed. Structs are
  // not supported. Therefore, it can only be slices, maps, primitives, and
  // any combination of those together.
  //
  // See the tests for examples of what inputs are turned into.