Now it tracks distance by character, and determines whether to show
furigana based on how long it's been since the last time a word was
shown with furigana rather than the last time a word was shown at all.
Also some minor performance efficiency improvements.
This way the main `FuriganaGenerator` can be shared among multiple
threads.
This also adds substitutions for words that the tokenizer insists on
using the less common pronunciations for.