cmTarget: introduce a `UsageRequirementProperty` structure This structure will encapsulate the behaviors of usage requirements. There are a number of them now and they all behave very similarly, so try to reduce the code duplication as much as possible.