PLT-427 - Periodic schedules

Add data structures and logic to generate schedules
Move Frequency and RollConvention
Add StubConvention

Data structure `PeriodicScheduleDefn` is used to define a periodic schedule. The roll convention, stub convention and explicit dates are combined with the frequency to create the schedule in a logical manner. The result is a `PeriodicSchedule` formed of one or more `SchedulePeriod`. This schedule should be capable of use by swaps and bonds, although bond schedules tend to be simpler.
Just noting that as a data object it is a fine balance between allowing data from external forms to flow through the system and rejecting all bad data. I took the opinion that dates out of order was not to be allowed at all, but other things that are more to do with processing and building the schedule would be. Fine lines...