c5b6d558

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.