Adds analysis_tool_t::get_error_string() and uses it to provide error codes for failures in tool initialization, process_memref(), or print_stats(). This is particularly important for tools like opcode_mix which can fail to decode during processing.
Changes analyzer_t to abort trace processing on a failure in process_memref() and return the error code.
Eliminates most direct printing to stderr via ERRMSG() in tools and analyzers and replaces it with setting an error string and propagating child error strings.
Tested with deliberate errors in the opcode_mix, cache_simulator, and tlb_simulator tools.
Fixes #3074 (closed)