Allow automata instances to be joined.

After forking off a more specific instance of an automaton, allow the more specific instance to be folded back into the more general one.

For instance, if we observe an event parameterised by a pointer to an object but then discover that we don't care about that event (because some other event has occurred), we should be able to 'forget' about the pointer.
Make state name information consistent.

A state's name information (variable references) should only be set by the first transition that comes into it. Thereafter, every in-scope transition's variable references should agree.
Simplify an example assertion.
Ensure i is always incremented!

When an element in Args is NULL, we skip the element but still need to increment the "where are we" index!