Uses Exceptions instead of die() to handle critical problems.

* Add a new Hybrid_Exception class
* Use Hybrid_Exception instead of die() for critical problems.

Using Exceptions is preferable to die, as it allows client code to
handle problems rather than forcing the client application to die.

A local Exception extension is used to allow code which handles the
exception to distinguish the exception type in try/catch blocks.