Initial support for unit upgrade crates

It will crash if a crate only provides unit upgrades, and the actor does not have the `GainsUnitUpgrades:` trait. This is because the crate will provides 0 selection shares to the actor at that point (and DivideByZero happens). I think it makes more sense if it silently does nothing. That gives no useful feedback, but maybe even a *poof of smoke* if a crate is a dud would work.

Paul mentioned doing way with the decimals for modifiers, and introducing an integer or a relational type instead:
> it could store the numerator and denominator internally, and then drop figures if it gets close to overflowing

And I wonder if it makes sense to have the GainsExperience system utilize this Upgrade class, but just level up all of them simultaneously and maintain the rank chevron?