Add granulating the time range

Granulating means splitting the time range into exclusive time
ranges of years, months, days and whatever is left.
This seems like a good opportunity to make use of an enumerator, such as, er, Enumerator#cycle :grin:, but probably Enumerator#each is better suited to the task at hand, since we'd only want one cycle. Something such as:
```ruby
CYCLES = [:year, :month, :days]
@cycles = CYCLES.each
```
and using cycles.next (ie. an attr_reader :cycles) to fully drop this function. The catch is that you would have to rescue StopIteration instead to check for nil. Might be worth a shot or two.