parsetext: add hyphenation tests
text_reader.cpp: use the language type and values from the FSM
text_reader.cpp: move U+2029 (Paragraph Separator) handling into the FSM
text_reader.cpp: inline the get_language_code helper function
text_reader.cpp: move the script transition logic

This change moves the logic that handled sequences of script
characters (Lo) where the script type changes from the state
transition logic to the FSM language value lookup logic.

This means that the script associated with the character is only
extracted when needed; that is only when Lo characters are
encountered.
text_reader.fsm: make the terminal state explicit
text_reader.cpp: use an emit_character table to determine when to write a character
text_reader.cpp: fix handling non-terminal states
text_reader.fsm: support 'word-word'
tools/fsm: group all state data into a single data structure
tools/fsm: support default values for the terminal and emit properties
text_reader.fsm: make the advance match start logic explicit
tools/fsm: support transitions that don't consume the current input character
tools/fsm: fix dot generation from the FSM data
text_reader.cpp: move newline handling to the FSM

This change moves the detection of the 'LF LF' sequence as a
paragraph block to the FSM.

The result of this is that the start position of the end-para
event is one character further along (i.e. in the middle of the
double newline sequence). Therefore, the tests have been updated
to reflect the new behaviour.
text_reader.cpp: move soft hyphen handling to FSM
text_reader.cpp: move quote handling to the FSM

This also reworks the quotes.txt test case to provide better
test coverage.
tools/fsm: don't support the consume input flag (it is not needed)