Allow for nested validate calls

Errors are collected per validate call. This allows to call
validate() inside of other validators without throwing everything
off game.
Extract PropertyValidator into its own file