Initial support for variable-length data fields + new shared memory model

-Added classes and enums to provide convenient access to cigar, base, and
 base qualities

-Implemented shared memory model with reference-counted pointers.
 htslib memory is shared between a SamBody and the classes that
 encapsulate its variable-length data unless the user performs a deep
 copy via the usual C++ copy semantics.

-Removed make_internal_copy() and associated functions from the
 sam_body API. Deep copies are now done exclusively via copy
 construction/assignment.

-Refactored iterators/readers to adjust to the new memory model.

-Refactored sam_header and sam classes to avoid allocating a new
 header on every header access.

-Basic tests

TODOs:

-Setter methods for the variable-length fields (will require htslib
 changes).

-Auxiliary data support

-Better tests (after setters are implemented)