Fix some issues with property defaults:

* A default can be defined as a function which returns a value, that function will be called each time a default is required, rather than once at the class definition time.
* DataType default functions are now called as required rather than once at setup.
* Setting a default as a mutable type (anything with typeof ‘object’) throws an exception as that is almost certainly not desired (doing so would share the default value across multiple instances of the object. To set a default to a ‘object’ type it should be wrapped in a function.

fixes: #8