PoC for schema validation and typing

We would like to apply schema validation to incoming data, and also to
more strongly type fields to enable more efficient persistence and query
optimisation.
Support max and min on int fields

Use classes rather than functions to add richer validation options.
Use ValidationError rather than ParseError

Seems closer to the reason for why we reject the input.
Add Decimal support