PLT-469 - Value schedule

Add `ValueSchedule` and `ValueStep`

Allows the representation of a value that changes in a schedule, such as notional, rate, spread and gearing. It consists of one initial value and a series of steps that change it. Changes must occur at schedule period boundaries, and can be expressed by an exact date or period index.

Includes a `resolveValues()` method to convert the schedule to actual values (classic for loops seem to make most sense for this logic).

Test coverage 100% in non-auto-generated code.
We know the array size up front, and the data can arrive in any order. An array is better suited to the task of a fixed size of initially null data that gets populated. Technically, its slightly faster to use an exposed array than one hidden in a list (no wrapper, less bounds checking), but that wasn't the prime motivation here.