Fix compiler error
Redesign exception class hierarchy

Fix a design flaw that causes non-virtual diamond inheritance from
std::exception, which MSC16 is not able to handle.