Use panic() internally in parser.go, but recover() in Scan() and return an error instance to user.
Added HistoryReader for providing error context;  clarified messages in panic() calls.