Add explicit begin/end bounds to assertions.

Whereas we have been using the last event in an automaton as an implicit bound, we really ought to have explicit bounds that can be used as places to do initialisation or cleanup.
Proper accepting states.

Now we need to modify the DFABuilder to DTRT.
Implement assertion cleanup.

When we hit an assertion's end-of-scope, call tesla_class_reset().

On entering an assertion's scope, we currently don't need to do anything special, but we might in the future, and it's nice to note it in the PDF output.