All validations are run with errors array returned

* Took a dependency on underscore.
Moved validations to named functions

Reduced surface area of the module's API.
Added return statements to make hinter happy