code: func Build(val interface{}) (Property, error) {
  	if val == nil {
  		return nil, nil
  	}
  
  	switch reflect.TypeOf(val).Kind() {
  	case reflect.Map:
  		valMap, ok := val.(map[interface{}]interface{})
  		if !ok {
  			return nil, bosherr.Errorf("Converting map %#v", val)
  		}
  
  		return BuildMap(valMap)
  
  	case reflect.Slice:
  		valSlice, ok := val.([]interface{})
  		if !ok {
  			return nil, bosherr.Errorf("Converting slice %#v", val)
  		}
  
  		return BuildList(valSlice)
  
  	default:
  		return val, nil
  	}
  }
docs: // Build creates a generic property that may be a Map, List or primitive.
  // If it is a Map or List it will be built using the appropriate builder and constraints.