Return validation errors as maps
Closes #286
Change predicates to return `nil | binary`