Compute field offsets when seal is called, not when fields are added.

This is a change of semantics, and means that the offsets are not available
until the struct is sealed (which is unlikely to be too restrictive in
practice).  Unfortunately, there's now an extra check for None during field
access.

The change in semantics gives us the hook we need to overload seal for stub
generation.