Add simple spellchecking support using python-enchant

- If a word a non-vietnamese, check the raw string with the spellchecker
and suggest a replacement
- Accept the replacement if its edit distance to the raw string is less
than 3
- Allow the user to undo the replacement by pressing backspace. After
that, add the replacement to the user's personal word list, effectively
blacklist it from the spellchecker.
Don't hardcode spell checking paths
Add python-enchant dependency
Externalize the enchant initialization code from BaseBackend

Use dependency injection from Engine instead.
Run ibus_engine/ibus_engine.py through flake8
Only blacklist spellchecking suggestion after 3 offences

After the user undoes the same suggestion for three times, show them a
dialog asking if we should stop suggesting that one.
Trailing whitespace
Reset spelling offending count if user doesn't want to blacklist it
Undo spelling suggestion before showing dialog

Because showing the dialog changes the focus and triggers a reset signal.
Introduce history
Make some common methods use the new history system
Make spell correction BaseBackend's responsibility
Check last_action() to decide wether to swallow backspace
Reset on the first normal key press after a spelling correction
Fix bug with backspace after spell correction undo

Before this commit, a backspace that triggers an undo action would
create a neverending loop because the last_action() is always an "undo"
one.
Also check a suggestion against an English spellchecker

Don't suggest a correction if the raw string is a proper English word.
Better constructor for the backends
Also correct joined words without space

Actually, enchant did that for us. We just properly add tones/marks to
the resulting words.
Add a config key for typo correction level

Default at 2, it's actually the maximum accepted Levenshtein distance
between the input sequence and the suggested sequence. Set it to zero
and we effectively disable the typo correction feature.
Immediately save config file upon loading