Enable OptionFold on non-primitive single-column Options

- Use a dedicated RebuildOption node instead of TypeMapping for the
  client-side Option rebuilding. This is necessary because the optional
  data columns’ types are not option-extended, so they must not be read
  if the discriminator is not 1. It’s also more efficient.

- The new expandConditionals phase expands the multi-column SilentCast
  and ConditionalExpr nodes created by expandSums.

- Create SilentCasts for column types in createResultSetMapping.
  Otherwise the original column types before option-extension are lost
  and we can’t build the right converters in codeGen.