"Split" ReaderException into subclasses to enable more useful error reporting