BuildList creates a new property List from an slice of interface{}, erroring if any elements are maps with non-string keys.
Slices in the property List are converted to property Lists. Maps in the property List are converted to property Maps.
Property represents a constrained value which can be a Map, a List, or a primitive.
If the property is a Map, keys must be strings and values are properties.
These constraints are only enforced by the builder functions: Build, BuildMap, and BuildList.
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.