Update error messages to be more plain-English like, and give all errors...

Update error messages to be more plain-English like, and give all errors a type to make customising error messages easy and reliable.

@harrison could you review this? Then I'll submit a PR back into the main repo.