Error handling overhaul.

I should add support for catching multiple errors on one go,
but that day is not today. It won't be too hard though, and
will just require something like `_exceptions.push_back()`
instead of throws and adding another helper exception
class (`exception_collection`? that'll be funny) to be thrown
at the end. Same at every (both? :D) stages.