Catching and reraising exceptions properly

This new method of reraising exceptions should retain the original traceback. So if you have pdb or ipdb on, you will receive the reraised exception with a more informative message, but your traceback will actually be where the original error occurred. It will also append the original exceptions and their messages to the new message by default.

See also https://groups.google.com/forum/#!topic/pylearn-dev/UbWz5tQDH5M
Yeah, they'll get got lost. Normally there is only one argument passed to an exception though: the error message. I guess I could change the next line to read
```python
new_exc.args = (new_message,) + new_exc.args[1:] + orig_exc_value.args[1:]
```
but I doubt it will ever actually make a difference.