A constraint class that validates using a user-supplied closure.
The Closure will receive one or two parameters containing the new value of the property and the object
on which the validation is being performed. The value is always the first parameterm and the object is the second.
These parameters must be type compatible with the value of the property and constrained class.
The Closure can return any of:
NULL to indicate success
true to indicate success
false to indicate a failure, with the default failure message
a string to indicate a failure with the specific error code which will be appended to the
prefix for the constrained class and property i.e. classname.propertyname.stringfromclosurehere
a list containing an error code and any other arguments for the error message. The error code will
be appended to the standard classname.propertyname prefix and the arguments made available to the
error message as parameters numbered 3 onwards.