Improve errors

This PR is aimed at accomplishing 2 things:

1. Add consistency for our internal error handling ways
2. Be more semantic and consistent with what error is raised

This is the yak that resulted because of #1041.