Add an actor upgrade system (+ overhauls veterancy and crates)

This introduces a framework for actor-specific upgrade types as originally proposed in #5471 and prototyped in #5963.

Three upgrades sources are currently implemented:
- Veterancy (allowing per-level customization).
- Crates.
- Purchasable global upgrades.

#5471 can be resurrected as a fourth `PluggableUpgrade` source.

Two upgrade consumers are currently implemented: stats (firepower, speed, armor) and cloak.

f25c414742002973d961cc50975fc18a5c96cbd7 provides a testcase that exercises these abilities, which implements toy changes:
- All crates give cloak upgrades
- Mammoth tank speed upgrade (GDI defense queue)
- Infantry give experience from friendly fire to help test:
- Infantry veterancy bonuses:
    - 1 (2x value kills): Super firepower
    - 2 (4x value kills): Super speed
    - 3 (8x value kills): Cloak
Why `IEnumerable<string>` instead of `string[]`?
Doesn't this member nullify `AcceptsUpgrade` as this is also a type?