add some todo items
rename NfaBuilderError to NfaReturnCode and use negative values for errors

nfa_builder_error_string is renamed to nfa_error_string. Any positive
value is assumed to be "no error".

This allows positive values to be used for different results of nfa_match.
add out-of-memory error handling to the NFA execution functions

As with the NfaBuilder interface, NfaMachine has an 'error' field to
store its current error status. If an operation results in an error,
then the error code is stored in that field (and returned from the
operation), and any subsequent operation on the machine will immediately
return the same error code until you free and re-initialise the machine.

Most nfa_exec_* operations just return an error code (0 for no error).
nfa_exec_is_* operations do not return an error code. If the machine is
already in an error state then nfa_exec_is_accepted returns 0 and
nfa_exec_is_rejected and nfa_exec_is_finished both return 1.
If the machine is not in an error state, then nfa_exec_is_* functions
return the normally expected values (and cannot themselves put the machine
into an error state).

The nfa_exec_ functions do not free the machine when they detect an error,
the user must do this themselves.

The simple driver, nfa_match, returns 0 for no-match, 1 for a match, or
a negative error code.
update the todo list
explicitly clear the capture stack in example/build_regex
more asserts never hurt anyone