Generate Protocol from an XML specification (ABI break)
Instead of maintaining 12k lines of hand-written protocol code, we specify the protocol in an XML and use a custom-written generator that generates the code for us. It's not only much easier to modify the protocol - we only need to change a single thing in the XML instead of touching several places of the implementation - but it's also much safer, as there's less risk of accidentally introducing a bug in the code. The major difference between the original hand-written code and the generated code is that we no longer use QSharedDataPointer and virtual methods in the Private classes, but instead all members are directly in the command clas with most getters and setters inlined. This means that copying commands is quite costly, so we pass them around as QSharedPointers or const references. This should give us a tiny little bit more performance.