Sam: constructors for optional field and optional field values

[Sam.optional_field] is a private type and the only way to build a
value is through the [Sam.parse_optional_field] function, which is not
adequate when parsing BAM.

Added a constructor for [optional_field] which takes
[optional_field_value]s. This is also a private type, so
invariant-checking constructors and parsers were added too.