Finishing of trace recording is now handled by polymorphic functions.

The tracer-context stores a function which determines what has to be done when tracing is finished (which depends on what you're tracing exactly and which annotation triggered the termination of the tracing), instead of spreading the logic all over the tracing interpreter.