Backend/frontend separation and communication.

- move backend components to its own file (components.py),
- add multiprocessing to run gui and backend in different processes,
- define an api for methods and signals,
- add backend/frontend communication using zmq,
- separate backend/signaler communication logic from implementation
  details and signals definition,
Lowercase signals names.
Do backend calls using kwargs.
Add SIGINT handler.
Fix signal names and parameters
Move 'error' keys to correct place.
Use a dict instead of an object to ease serialization.
Use stdlib's json to ensure receiving unicode.
Remove unneded parameter on signals.
Add type checking for the backend.