This patch changes the type of BudgetRemaining and `costAndCollectOperands` to use `InstructionCost in` for
costAndCollectOperands from 'unsigned' to 'accumulated cost values, and introduces a new class `InstructionCost' so that itBudget`
can take into account an Invalid cost. isHighCostExpansion will returnto maintain a budget of those costs.
`InstructionBudget` is an abstraction for `InstructionCost` which hides some
true iof the cost is invalid, but the patch is NFC until any omplexities around InstructionCost's state.
`isHighCostExpansion` will return `true` if the cost
functions return a I is too high or invalid cost.