Added ability to make upgrades

This is a continued version of #5375 rebased and ready to go.

If you want a testcase go to this branch https://github.com/WolfGaming/OpenRA/tree/D2KUpgradeTest it adds an upgrade queue and some upgrades to D2K, 4 of them are used to unlock buildings/units and 1 of them is used to give a 10% armor reduction for infantry.
You could future-proof this by defining a `INotifyUpgraded` interface that defines an `UpgradeAvailable(string key)` method, and then keep `.Upgraded` private.