Sam: eliminate `item` type

No longer needed since we now aggregate header lines, and return stream
of alignment lines only. Other minor changes too:

* type rnext is now private.

* New parser now provides line numbers in errors, and retains order of
items in header. Also was accidentally discarding the `others` header
items; now keeping.
Sam: validate alignments more

* RNAME and RNEXT: now checking if they are defined in SQ lines when SQ
lines present.

* Make sure QUAL string of same length as SEQ.

* Make sure TAGs in optional fields are all unique.
define compare_of_list function
Sam: define printers