Use proper types in re-throw logic in box.raise()

This fix adds virtual method raise() to Exception classes to throw
derived type instead of base.