Refactored Exceptions

I've made the exception classes way more intuitive and useful (I hope). This will conflict with #115, so after you've merged that, I'll fix up the merge conflicts here so this can be merged.