Make Reporter mutable

A reporter keeps track of states like a list of failures, so it needs to
be mutable.
Improve the comments about the use of mutable
Implement startDump and dumpFailures
Remove redundant include and using directives
Get the real exception message into what()
Use exception message copy to prevent dangling ref

Storing the const references result in dangling references as the
passed-in const references' lives do not span beyond the caller's stack
frame. The objects they reference are destroyed when the callers' stack
frames unwind. This is a property of C++ as const reference to
temporaries only persist as long as it is still within the calling
function; storing the const references further into a member won't
persist the temporary objects (the temporary life span is only
temporarily granted in the local scope and is not transitive).
Properly persist exception objects

The exception objects are not persisted properly as they get destroyed
after each catch block. Smart pointers on the exception objects must be
used.
Remove unnecessary explicit keyword

The constructor is not unary (anymore).
Add section header comment
Reorder directives lexicographically
Remove redundant include and using directives
Rename toString to desc