tasks: Thoughts on integrating with code coverage analysis
spec: Split model execution/SIM testing into a new module

This gives the SIM tester a clear interface and also substantially
beefs up its documentation.

TestWriter is now hooked up through a general "model execution
monitor" interface.
modelexec: Add a type for divergences, to replace tuples

This gives us a good place to document what a divergence is and what
the fields mean.  It also eliminates the ugly str_diverge function.
simtest: Track current callset in ExecutionMonitorBase
testgen: Base TestGenerator on ExecutionMonitorBase

Now that there's a common interface for monitoring executions, make
the TestGenerator interface extend this base interface's callbacks for
path generation with callbacks for model generation.