Add Hour Period

Create Hour class that extends PeriodAbstract, and its corresponding Exception.
Add Minute Period

Create Minute class that extends PeriodAbstract, and its corresponding Exception.
Enable Hour Iteration

Make the Hour period class implement the Iterator interface so that it can be used to fetch each minute within the hour.
Add Second Period

Create Second class that extends PeriodAbstract, and its corresponding Exception.
Enable Minute Iteration

Make the Minute period class implement the Iterator interface so that it can be used to fetch each second within the minute.
Add Unit Tests

Add unit tests for the time period classes, with 100% coverage.
Create Helper Methods

Add all the helper methods for creating the time periods in the Factory class (and define them in the factory interface), along with the main Calendar class.
Update Unit Tests

Update the unit tests for the Calendar and Factory classes, including adding more fixtures, to test the new helper methods for creating the time periods.
Enable Day Iteration

Implement the Iterator interface in the Day period class, so that hours within that day can be fetched.
Update Week Period

Update the week period class constructor to use the DateInterval defined in its own dedicated method, than defining it again in the constructor.
Update Day Period

Make an exception to acompany the Day period class, and check the validity of passed start dates in the constructor to ensure it follows the same pattern as the other period classes.
Update Unit Tests

Various improvements to the unit tests to increase the code coverage percentage.
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
Update Time Periods

Update the constructor method in the Time period classes to pass the factory argument into the parent constructor. Without it a specified factory would be ignored and a new one created in its stead.
Update Calendar Class

Fix coding standards (line exceeded 120 characters).
Update Unit Tests

Fix coding standards, mostly lines exceeding 120 characters.