Update Calendar Options

Add a new option called "strict_dates" to switch between throwing an Exception if the begin time for a period is not at the start, or automatically adjusting begin dates to be correct.
Update Time Periods

Update the Time period classes to use the new "strict_dates" option, which is false by default.
Add unit tests to cover each time period, and the methods to switching modes in the Calendar and Factory classes. This option will not be added to the FactoryInterface because it is not required functionality (it does not affect the data held withing classes, only restricting their input).
Update Date Periods

Also update the Year, Month and Day periods to use the new "strict_dates" option in the Factory. Make the appropriate changes to unit tests to cover this change. Those tests currently cause other parts of the library to fail.
Add DocComment