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
Do backend calls using kwargs
Handle Ctrl+C.
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 signal parameter.
Add type checking for the backend.