ical-recurrence: fix the lossy golden event occurrence format The `.occ` golden files that the scenario tests in `ICal.RecurrenceSpec` read and write are a serialised form of a recurrence set, so parsing one back has to give the set it was rendered from. It did not, for two independent reasons. `renderEventOccurrence` wrote nothing at all for an absent property, while `parseEventOccurrences` read the file back in fixed two-line chunks. An occurrence without a `DTSTART`, or without a `DTEND`/`DURATION`, therefore shifted every occurrence after it in the file. In practice that meant a scenario calendar for an event with no `DTEND` could not be expressed as a golden file at all, and a golden containing one was silently misparsed rather than rejected. Chunking on raw lines was also wrong on its own. A content line longer than 75 octets is rendered folded over several raw lines, so one long property, a `TZID` for instance, was read back as several occurrences. ## Commits 1. The roundtrip property test, which fails on both counts. 2. The fix: write an empty line for an absent property, and chunk unfolded lines from `parseUnfoldedLines` rather than raw lines. ## Checks - `roundtrips with parseEventOccurrences` passes for 5000 generated inputs. - Full suite: 230 passing, 0 failing. - The existing golden files are untouched, because every occurrence in them has both a start and an end and none of their lines are long enough to fold.