Outstanding.
I was able to address a few of these.
Basically, there are two big ones caused by the new threading AI.
First, Unit::GetIntelligence() is called by the AI a lot for things like seeing how different creatures should behave (you can tell the wolf has a bad intelligence XML because it will attempt to "talk" to you).
Anyway, that call involves a lot of stuff that gets touched by other threads. So I've created a new fuctnion called Unit::QueryIntelligence which simply sends the last cached value of intelligence.
The other one in there is related. It's Unit::GetBattleRank (your combat rating). This turns out to be a pretty nasty call in terms of what it ends up touching. So I created a QueryBattleRank which does the same thing as above -- last cached value. Big performance boost too.
While I was in there, I redid how GetBattleRank works because the AI really relies on Combat Rating meaning something and in the current public build, it's not terribly useful as a predictor of who will win a battle. I changed it so that it looks at the combat rating of individuals in an army differently so that it doesn't simply add them up. I.e. 1000 peons will still get smoted by 1 dragon so the combat rating should reflect this.