Cast.toString no longer tries to parse `val` if passed undefined
Cast functions are named (not anonymous)
Add cast type functionality to Property class
Enable records to cast property values on set