Fix for /^(b+|a)c/, /^(b*|a)c/, and /^(b?|a)c/
Fix for /^(b+|a)c/, /^(b*|a)c/, and /^(b?|a)c/

Bug was an interaction between ALT and */+/? REPEAT subnodes.  The end
states of the ALT node are common between all of its children.

REPEAT nodes would add epsilon transitions from the start/end states to
other states.  This can cause the the repeat to apply to all ALT
subnodes.

The fix: add "buffer states" to the start and end of each */+/? REPEAT
subnode.  The buffer state has an epsilon transition in and an epsilon
transition out.  Repeat transitions are added between these buffer
states.  This keeps them separated from the start/end states of the ALT
subnode.

katef/libfsm,katef/libfsm,katef/libfsm,katef/libfsm,katef/libfsm