A type that can be used as a property. It covers every type which have an associated ParamSpec
(HasParamSpec) and some useful types wrapping HasParamSpec.
The definition is recursive, so you can nest many Propertys together. The final ParamSpec will
be the one of the innermost type
A container type implementing this trait can be written by the default setter generated by the Properties macro.
It takes a FnOnce(&mut Self::Value) so that the caller may access nested fields of a struct
by doing ${Self::Value}.member