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.
See `validate()` method.