Add failed constraints to schema errors

Closes #64.

Schema messages will now have a constraints hash that holds the relevant constraint that failed. This is useful for some errors as we can provide more detail in the application about what failed, e.g. the minLength, minimum range, date pattern, etc.