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

Additional work on #195

Waiting on #213 to add move construction/assignment tests
Remember that this optimization only applies for objects that are expensive to copy, and then only sometimes. It's not a universal rule by any means.

Here, I think 2 move constructor/assignment calls might actually be about as expensive as a copy (which is just an atomic reference count update), and the lvalue case would be worse off with a copy and then a move instead of just a copy.

I also think that this would obscure the true intentions of the code with regard to ownership transfer -- the extra std::move() would confuse anyone who has not read Meyers.