example: record and print out (up to 10) captures
make structure of NfaiStateSet clearer by splitting the array in two
combine the two alternative execution loops in nfa_match

Hopefully a good compiler will split them out again if it's worth it.
print out capture state after each execution step
wrap execution tracing code with ifdef NFA_TRACE_MATCH
move the default action in nfa_exec_step to the bottom of the switch
fix nfa_exec_is_finished (acceptance always implies finishing)

It's possible (indeed, it's likely) for the machine's final state set to
include several states including the accept state.
rewrite the way captures are managed

The version is based on Russ Cox's example code. Currently has memory
leak(s) due to incorrect reference counting of capture sets.
make the example print out the captured text
example: capture the entire pattern as group 0
split nfa_exec_alloc_and_init into two functions plus a wrapper
fix some warnings and errors in NFA_NO_STDIO build mode
nfai_print_captures: take a pointer to the NfaiStateSet to print
trace output: print final captures for both state sets
delete unused function nfai_incref_capture_set
add trace output to track some capture-set operations
don't bother storing a capture-set on a SAVE state

It's not necessary, because save states are transitional states. It's also
unhelpful, because it means either breaking the capture-set refcount
invariants, or increasing the reference count for the updated state
(which is bad because it's likely to lead to unnecessarily duplicating
the capture-set instance the next time it's updated).
whitespace
nfa_exec_free / nfai_free_state_set: free any referenced capture sets

We free them fully, rather than just putting them on the VM's capture-set
free list, because the free list is about to be destroyed anyway.
nfa_exec_step: access vm->current directly rather than putting it in a var