code: func BuildMap(rawProperties map[interface{}]interface{}) (Map, error) {
  	result := make(Map, len(rawProperties))
  
  	for name, val := range rawProperties {
  		nameStr, ok := name.(string)
  		if !ok {
  			return result, bosherr.Errorf("Map contains non-string key %#v", name)
  		}
  
  		convertedVal, err := Build(val)
  		if err != nil {
  			return result, err
  		}
  
  		result[nameStr] = convertedVal
  	}
  
  	return result, nil
  }
docs: // BuildMap creates a new string keyed map from an interface{}-keyed map, erroring if a key is not a string