Add granulating the time range

Granulating means splitting the time range into exclusive time
ranges of years, months, days and whatever is left.
As a rule of thumb I try to avoid oneliners that do several things. The problem with this line for me is that it can lead to subtle problems when changing the code or the callers, and is harder to understand than a normal if block.

I think you want to specify a concatenation of statements under a certain condition, yet this is a concatenation of conditions with a logical 'and' and a dependency on the behaviour of an external method and one input parameter. That oneliner is effectively equivalent to:
```ruby
return if cycle.nil? and @rest.push(range)
```
And what you probably want is:
```ruby
(@rest.push(range); return) if cycle.nil?
```
Still a oneline, but admittedly much uglier. I'd go with the verbose if-block and actually write robust code in the face of change, even if not so concise.