Split trace reading into new library.

Split trace reading and state recreation functionality out of the
SeeCTrace library, into its own library: SeeCTraceReader. Information
shared between SeeCExecutionTracer (runtime) and SeeCTraceReader
(recreation) is kept in the SeeCTrace library. This should be minimal
to help avoid polluting the recreated state with platform dependent
details.
Add option to print comparable states.

This is accessed by passing "-comparable" to seec-print. It simply
avoids printing any volatile information in the state (e.g. addresses),
so that we can compare printed states from the same program run by two
different versions of SeeC to ensure that the recreated states are the
same.
Correct for shim functions.

Correct implementation of runtime error callback handling in
TraceThreadListener::handleRunError() to account for shim functions.
Check memory allocation for unknown pointers.

In CStdLibChecker::memoryExistsForParameter(), check that the target
area exists even if no error is raised for the pointer target (as we
might not have pointer target information).
Correct bsearch tests.
Add testing for comparable trace states.

This adds tests for the expected comparable states for all execution traces in
the test suite. Any trace that is printed with seec_test_print_trace() is
expected to have a corresponding ".expected" file which contains the expected
output of printing the trace with "seec-print -S -comparable -reverse". This
should help us to maintain order when making changes to the execution tracing
system in the future!