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.
`actor.Info.Name +this.ToString()` will return e.g.`rifleOpenRA.Mods.RA.Upgradable` for all riflemen, and so this key will clash.

The simplest solution would be to add a `string Name = "upgrade"` parameter to `UpgradableInfo`, and then use `var key = "{0}_{1}_{2}".F(actor.Info.Name, actor.ActorID, info.Name);`