Bug 865484 - refactor dictionary data structure and search algorithm for keyboard auto-correct

address Christoph's review comments

cut another 40% off the dictionary size!

Not sure whether this is a good idea: allow arbitrary substitutions in addition to nearby character substitutions.

store the length of the longest word in the dictionary file, and use it to immediately reject input that is too long to be a word

be smarter about variant forms (case and diacritics)

Add abbreviations and frequency 1 words to the dictionary, increasing size about 20%

simplify the algorithm and focus on corrections instead of predictions