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.
The factories do not accept nulls (apart from the one that accepts all parameters). This makes them good for type conversion and minor conversions, such as boolean end-of-month flag. Factories also make it clearer to define valid combinations when some fields are null.

A null stub convention is not the same as 'None'. If you specify explicit stubs (by using dates) then the stubs are defined that way. The mixture of an explicit dated initial stub and 'ShortInitial' or 'LongInitial' is valid, but with 'None' is invalid.

I chose to use nulls mostly because it made the most sense of the options available. In this case, there are various different ways to define stubs and rolling and users should not be forced to enter values just to satisfy the type system. Automatically creating such values would affect the data stored in the database and what users see, causing them to think that they have to enter more values than they actually need to.