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.