1) MD5 hash all xml files, and compare with server's version.
2) Create a temporary tech tree, downloaded from the server. This would only be the XML files downloaded, it gets the models and textures from your tech tree. (save bandwidth + loading time)
3) MD5 hash XML files, send to server, and push most common version to all clients as per 2.
Also, rather than sending all the small details, why don't you just send the orders?
If you tell all clients "I'm sending Initiate #35 to build a library at coords 350,223.5" It is should be assumed that all clients can work out the same thing for the results of this. After all, We all have the same engine, and the same starting and finishing locations, why don't we just trust that each client will do the same thing? When it gets to the "stopped" state at the end of the walk, you can send the absolute location, and move him slightly on all remote clients, but don't bother saying "moving here; walking around golem; walking around gold mine; walking back this way again;got there;" or "I'm here: X,Y; now I'm here: X + 0.001, Y - 0.002; Now I'm here..." It's just spam!
EDIT: I got the game three days ago, and havn't looked at the source, but from light reading and starting to mod, this seems possible, and the best (or only) idea proposed.
EDIT2: I was thinking about the server today. All the "server" really has to do is dispach new events. I was thinking that we could use something as simple as an IRC room, with CTCP (or whatever it is... You know what I mean) for game events, and normal messages for chat. The AI can be split so each player supports an AI, or two if the game "host" (the one who started the game, and possible running a lightweight IRC server) has put that many AI into the game. The rest (the stuff mentioned above) is handled by all clients, who compare their results on the channel.