Cleanup: unnecessary forward declaration.

This used to be necessary when more things were declared in Automaton.h; now it isn't.
Make Automaton::IsRealisable() virtual.

One subclass of Automaton (DFA) is always realisable; the other (NFA) may only be so by accident.
Distinguish CLI and .dot labels.

.dot files can incorporate e.g. HTML codes for Greek characters. This makes less sense at the command line!
Trivial: separate some bits of CLI output.
Use the correct label in Transition::String().
Add iterator over transitions in an automaton.
Cleanup: remove redundant (and unreachable) code.
Teach 'strawman' makefile about .dot, .pdf files.
Rename 'Now' to 'NowEvent'.

This is a clearer name that causes less namespace pollution (which I was starting to bump into).
Use LLVM's RTTI for Transition hierarchy.
Expose FnTransition::FnEvent().

Clients need to look at event information.
FindInstrumentation(FunctionEvent&, Module&).

This function finds all instrumentation functions within a module that will be affected by a FunctionEvent.
Oops: correctly report when we modify the IR.

This probably doesn't matter, since we are explicitly controlling the sequence of TESLA LLVM passes, but correctness is better than incorrectness.
Hygiene: hide some instrumentation details.
Trivial: rename Automaton::Type enum members.
Store more assertion information in an Automaton.

Add assertion, name and description fields.
Expose Automaton::ID().
Trivial: add some appropriate const-qualification.
Trivial: new NULL assertion.
AddInstrumentation(FnTransition, ...).

This converts a function-related description of a TESLA state transition into instrumentation code that can receive events and kick automata.