SamBuilder, in-place setters, partial Sam tag support

-Created SamBuilder to build Sam objects from existing data or
 from scratch
    -unlike in-place setters in Sam class, can restructure and
     manipulate the variable-length read data in arbitrary ways
    -offers both repeatable builds and the option of a (slightly
     more efficient) one-time build
    -supports setting data fields using existing reads, vectors,
     initializer lists, and strings (least efficient)
    -basic validation of logical consistency of read before each
     build (eg., number of base qualities must match number of bases)

-In-place setters for data fields in the Sam class when more radical
 restructuring is not needed

-Basic support for Sam TAG:TYPE:VALUE fields
    -read-only support for integer, double/float, char, and string
     valued tags
    -can copy an existing read's tag in their entirety using SamBuilder,
     but can't yet set individual tags

-Cigar::make_cigar_element() to ease creation of vectors/initializer_lists
 of cigar elements

-Comprehensive tests for SamBuilder and SamTag

TODOS:

   -support for tag fields of type H (byte array) and B (numeric array)
   -add ability to set/modify individual tags in SamBuilder
   -properly set the core.isize field in SamBuilder (currently the
    only field not yet fully supported apart from the tags)
   -fix issue with htslib bam_aux2i() and bam_aux2f() return value
    ambiguity when field is of wrong type
all member functions declared in the class declaration are inlined automatically. No need to say inline here in all of these. (also minor, no need to change)