Validation fixes, property changes & mocha tests

There was a bug where if both: `properties.required = true` and `instance.returnAllErrors = true` then calling `save` with null required properties would throw back a single error, rather than an array of all errors.
The fix required changing how `required` works, but I'm pretty happy with the solution.

New test cases are written with mocha, and I also converted a few old validation tests.
I was waiting for @StephanHoyer to begin the switch to mocha, but seems he's been busy.