Use pointers for optional header values.

Instead of a header having 'hasFoo' bool and 'foo Foo' fields, just use
a 'foo *Foo' field which may be nil.

I'm not entirely convinced by this decision, but it seems like the
lesser of two evils. I may revert this in the future.