uses object.create everywhere ...
handle validations
handle validations
adds pre and post hooks