Return validation errors as maps
Closes #286
Change predicates to return `nil | binary`
Merge pull request #301 from lexmag/errors-as-map

Return validation errors as maps