code: func Prepare(schema Schema) Schema {
  	job := prepareJob{
  		seen: make(map[Schema]Schema),
  	}
  	return job.prepare(schema)
  }
docs: /*
  Prepare optimizes a schema for decoding/encoding.
  
  It makes a recursive copy of the schema given and returns an immutable
  wrapper of the schema with some optimizations applied.
  */