Use the IteratorAggregate pattern for DatePeriod iteration

More work to improve the issues talked about in #112