Performance improvements on sam records

* strip away header from sam records
* make sam records hold pointers to the body unless copy constructor explicitly called
* modify iterators to own the memory allocation of the objects returned at each iteration
* explicitly tell users that the life of objects returned by reference is limited to the next iteration. Users can opt in on the copy constructor.