c69a7a02

By: Greg Pfeil <greg@technomadic.org>

Extend `CyclicCalendar`

This adds two more primitive operations to `CyciicCalendar`: `cycleLength` and
`ordinal`, which then allows a default implementation of `onOrBefore`.

It also generalizes a number of previously `DayOfWeek`-specific operations to
work for any `CyclicCalendar`.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 6s 6s 6s 0s
Eval 7s 3m46s 3m46s 3m53s 0s
Build 1m34s 53m12s 31m54s 33m29s 23m36s
Suite 0s 57m05s 33m29s 33m29s 23m36s

Timeline

0s1m2m3m4m5m6m7m8m9m10m11m12m13m14m15m16m17m18m19m20m21m22m23m24m25m26m27m28m29m30m31m32m33m