Proposed new API

Resolves #1
Resolves #11

@garyb I'm putting this here for discussion. I'd still like to work on nested error messages for things like arrays and properties.