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.
`{data.inspect} is not a valid schema.` is nice and descriptive if I'm understanding this method correctly?