Error - Error/exception handling in an OO-ish way

The Error package provides two interfaces. Firstly Error provides a
procedural interface to exception handling. Secondly Error is a base
class for errors/exceptions that can either be thrown, for subsequent
catch, or can simply be recorded.

Errors in the class Error should not be thrown directly, but the user
should throw errors from a sub-class of Error.
