Move MemoryState::Region into its own class, MemoryStateRegion.

Add a method to seec::cm::Value to get the MemoryStateRegion for the Value's occupied memory (naturally this should only be called for Values which are in memory).

Make LEVElideEmptyUnreferencedStrings use the array's MemoryStateRegion to check each sub string's initialization and whether it begins with a zero (terminator), greatly improving the speed of graph generation with large arrays of strings.
Fix the implementation of OnCommandExit for Mac OS X.
Ensure that existing known memory regions are sufficiently large when recording the static of a static internal object. If they are not, remove the existing region and create a new appropriately sized region.

This fixes a bug with recording readdir() which, though the pointee object is always the same size (1048 bytes), returns pointers at small increments (24 bytes), causing the regions to overlap.
Cancel graph generation if the state is going to be moved.

Also, libc++'s std::async seems to be working fine now, so remove the alternative path for when _LIBCPP_VERSION is defined.
Use raw MemoryRegion to speed up graph generation of large arrays.
Record the execution of void type Instructions into the trace.

Recording the void Instructions is incredibly inefficient in terms of storage, because if we simply knew the BasicBlock path through the program then we could simulate the re-execution of these void Instructions (they don't produce a value anyway, and any side effects are recorded separately). However, the measured increase in trace size on real student programs is quite small, and this allows us to quickly enable some nice movement features.

Add new movement functions in seec::cm, moveForwardToCompleteTopLevelStmt() and moveBackwardToCompleteTopLevelStmt(). As the names suggest, these functions move until the point that a "top-level" statement has been evaluated (e.g. as would be used in the dynamic evaluation tree).

This also allows us to use the Stmt completion mapping information in the implementation of moveForwardUntilEvaluated() and moveBackwardUntilEvaluated(), greatly simplifying their implementation.
Enable LEVElideUninitOrZeroElements for arrays of non-scalar values (e.g. structs or unions).
Update MemoryStateRegion and MappedValue to correctly handle regions that do not exist or are not sufficiently large.
Show a dotted red border on the left, bottom, and right sides of nodes which have an associated runtime error.

Also, don't initially draw nodes if they're going to be drawn over with the hover style immediately afterwards.
Use wxAutoBufferedPaintDC to avoid flickering.
Correct use of wxDC::DrawLine() to account for the fact that the final point is not included in the line.
Update execv, execvp, and execve to use SpeculativeTraceClose to handle trace closing and opening.
Archive traces prior to calling exec functions, and extract them to resume tracing if the exec fails.

This ensures that the tracing of programs which "terminate" via exec behaves the same as all other programs.

Also, fix the recording of errno to ensure that the location of the errno variable is recorded as known memory.
Update checkStreamScan() so that pointer validity is checked for pointers matches to string conversions that do not have a specified width.
When checking pointer validity, only use the MemoryArea of the allocation that the pointer is referencing (i.e. that which contains the pointer object's base).

If this MemoryArea does not exist, then raise a PointerObjectOutdated error. This improves the accuracy of error messages when using pointers that refer to deallocated memory (when the area has not been reallocated to a new allocation), so they accurately state that the pointer's target object has been deallocated, rather than stating that the pointer no longer refers to its target object.
Attach an InfoCStdFunctionParameter error to errors raised by CIOChecker::checkStreamIsValid().

Reword the error message for PassInvalidStream so that it does not mention the parameter (as it will be indicated by the attached error).
Don't attempt to create a user action record if the trace exceeds the action record size limit.
Use wxAuiNotebook rather than wxListbook for the StreamStatePanel. The wxListbook control was displayed differently under OS X (Cocoa) and GTK - this change should make the display more consistent across platforms (as a bonus, it allows users to move the tabs and split the window).
Modify the TraceViewFrame's view menu so that it uses check items, which are checked if the associated wxWindow is currently shown, and can also be used to hide the associated wxWindow.
Correctly include <numeric> for std::accumulate.