Remove raw pointers from Sam Readers/Iterators and Sam/Variant Writers

Additional work on #195

Waiting on #213 to add move construction/assignment tests
just a thought that occurred to me while reviewing your code. If we delayed these pointer constructions to the `begin()` member function, we could actually make them all unique_ptr in the iterators. I don't see why the reader needs to hold shared ownership of these.