Remove raw pointers from Sam Readers and Iterators
- correct copy/move constructor/assignment
Remove raw pointers from SamWriter and VariantWriter
- correct copy/move constructors/assignment
Change file pointer type to auto* in readers
Convert writer outputs to unique_ptr
Merge pull request #214 from broadinstitute/jt_raw_pointer_removal

Remove raw pointers from Sam Readers/Iterators and Sam/Variant Writers
TestUtils: add copy/move operation test functions

Testing move and copy operations are something we do all the time and
it's not always trivial. It includes a lot of boiler plate code. These
two template functions take away the boiler plate and test the following
aspects of the copy and move operations:

* copy and move construction
* copy and move assignment
* check that self assignment doesn't destroy the object

The copy version returns all three copies made to test the functionality.

The move version returns the final moved to object. Note that the move
function will move from the parameter passed in, so that parameter
becomes unusable.

fixes #206