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.
Given that null implies StubConvention.NONE and that you control construction of the class, I would have thought it would be better to avoid the null and set to NONE if the user passes null. 

Related to this, the many combinations of static constructions seem hard to follow and take a large number of params. Pushing the user towards a builder method would make construction clearer and mean they wouldn't have to pass null when they just want a default.