Added IDisabledTrait & UpgradableTrait with upgrade levels support

 * IDisabledTrait for identifying (and filtering) disabled traits
 * UpgradeEnabledDisabledTrait provides an abstract base for enabling by upgrade and disabling by upgrade
IMO it would be clearer if we exposed all three levels of interest to the yaml:
```csharp
[Desc("The maximum upgrade level that this trait will accept.")]
public readonly int UpgradeMaxLevel = 0;

[Desc("The minimum upgrade level at which the trait is enabled.", "Defaults to 0 (enabled by default).")]
public readonly int UpgradeMinEnabledLevel = 0;

[Desc("The maximum upgrade level at which the trait is enabled.", "Defaults to UpgradeMaxLevel (enabled for all levels greater than UpgradeMinEnabledLevel).", "Set this to a value smaller than UpgradeMaxLevel to disable the trait at higher levels.")]
public readonly int UpgradeMaxEnabledLevel = int.MaxValue;
```