[Refactor] Proper layering needs to be established
Gajim needs a more explicit layering.
Which layers/components do exist? How do we want to structure the different parts of the system? How do those communicate? How does information flow through the application (in/out)?
Simply stating we have src/ and src/common is not enough for an application with 100 000 LOC.
For example, simply imagine what and where (go down to the method level!) you would need to alter code if you'd want to: Implement a new xep that can request information from contacts on demand and show this information in the roster and in the chat window.
So the question: What do we have and where do we want to head to?