Fix test accessor
First implementation of ThrowableFingerprintCalculator
Initial implementation of FilesystemStackTraceProcessor

FilesystemStackTraceProcessor stores stack traces in text
files on the filesystem, including the URIs in the log message
instead of the entire multiline stack trace. The filename use
the MD5 fingerprint of the stack trace, so stack traces are
automatically de-duplicated. This saves disk space and IO,
as well as allowing multiple occurrences of the exact same
exception to be detected by scanning the original file and
grouping by exception fingerprint.

StackTraceProcessor now throws Exception, as an OpsLogger
implementation can't assume that a stack trace will always be
processed reliably.
Add some argument validation to OpsLoggerFactory