Add granulating the time range

Granulating means splitting the time range into exclusive time
ranges of years, months, days and whatever is left.
I'm ok with recursion, specially as it is since this is bound to be a few stack frames deep, but just out of curiosity, have you considered a non-recursive version? Probably not worth it, but for some short methods it might end up not complicating things that much.