Expands a recurrence rule into occurrence timestamps (RFC 5545, section 3.3.10). Each FREQ period (year, month, week, day, hour, ...) is turned into a set of
candidate days and times, which the BYxxx rule parts then filter. Filtering
a whole period covers both the "expand" and the "limit" behaviour described
in the RFC table, and BYSETPOS then picks from the sorted period set. Calculations use wall-clock dates in the DTSTART timezone, so daylight saving
transitions keep the local time, and the process default timezone is never changed.
DTSTART always counts as the first occurrence, even when it does not match the rule. SKIP of RFC 7529 moves an instance on an invalid day of the month (e.g. February 30)
to the last day of the month or to the first day of the next month; this happens before
BYDAY, BYSETPOS and COUNT, and duplicate instances are removed.