Improve english suffix rules

Rewrite suffix rules using regular expressions for readability and extensibility, and expand coverage to all suffixes
Reorder rules by specificity (fixes problem with y+... -> i+... blocking y+s -> ies)
Improve suffix rule detection
...ue has a silent e
inch + s = inches
simplify plural rules, add nudzhes
apply rules to multi-word suffixes like 'ing in' or 'ly is'
a better (working) way to implement multi-word suffixes
belches
patriarchied
wearisome (oops)
remove y+i->i rule as it causes too many problems
Add unit tests. All pass or are marked as TODO.
allow {^ing Mc^} to work as expected
Refactoring the ConfigDialog class to use different modalities.

The bind on the self._cancel button was provoking strange behaviours
when the ConfigurationDialog was modal. I removed it at no cost for the
actual fonctionnalities (clicking on cancel will still close the
dialog).

I added a EndModal call that provides a return value of wx.ID_SAVE for
the ShowModal call. Otherwise, the value returned to ShowModal() would
be wx.ID_CANCEL for both _save() and _cancel() methods.
Making a distinct config check method. Also, new Exception class.

By refactoring plover/app.py, I'm separating the configuration checks
from the configuration assignations. That way, it will be possible to do
checks before writing the configuration to the config file. This would
happen when the user clicks on the Save button of the configuration
dialog.
Fixing problematic behaviour when something is wrong in the config.

The problem can be reproduced by taking the following steps:
- insert a wrong parameter in the configuration (for instance, a
  non-existing dictionary file). This can be done by editing the
  ~/.config/plover/plover.cfg file or through the configuration dialog
  of plover.
- close Plover (if open)
- launch Plover from the command line (to see the error)

Plover doesn't launch, since it encounters a ValueError that's not
procesed.

I fixed this by catching such errors (renamed in
InvalidConfigurationError), and offering the user a chance to fix his
mistake through the configuration dialog. If, when the user submits his
configuration again (by clicking "Save"), the configuration still is
incorrect, the user will be prompted and offered to correct his
configuration again.

Since this could become a loop, clicking "Cancel" on the configuration
dialog will result in Plover closing without further dialogs.

This is made possible by the previous commits, allowing the
configuration dialog to be modal.

This fix can be improved by validating the configuration in the
ConfigurationDialog class, using a previous commit that separates
verification and usage of the configuration in the StenoEngine class.
This will be the subject of a following pull request.
Small refactor to reduce this line length.
Renaming and moving the config check (making it static).
Using the config check method to forbid the write of an incorrect config

By previously separating the config check method from its use, we are
now able to add a check on the configuration that's about to be applied
to the configuration file. If there's an error in the submitted
configuration, the user will be prompted with an error message, the
configuration file won't be written and the user will get a change to
change the configuration throught the dialog.