Update error messages, add error types

I've rewritten all the error messages to be more plain English, but also made errors more useful to machines by giving them all `Symbol`ic types. This makes it super easy to choose how to deal with schema violations using `case`s.

Not backwards compatible, so might need a version bump to 0.3.0.
I think these only need to be h3's (rather than h4's).