Previously we'd encode an optional slice as
Optional(Repeated(Struct)), which treated the entire slice as optional, but Parquet needs us to treat this as Repeated(Optional(struct)) where each element of the struct is optional.
The handling for this is a little bit messy, but it's also messy to pass the context down further, so we end up with a special case inside of the struct handling.
Previously we'd encode an optional slice as Optional(Repeated(Struct)), which treated the entire slice as optional, but Parquet needs us to treat this as Repeated(Optional(struct)) where each element of the struct is optional.
The handling for this is a little bit messy, but it's also messy to pass the context down further, so we end up with a special case inside of the struct handling.
Fixes #400.