Add `SamReaderFactory` as a new facility for reading from SAM files.

- Produces `SamReader` objects, which are similar to `SAMFileReader`.
- Deprecate `SAMFileReader`, as `SamReaderFactory` is the preferred approach to creating things that read SAMs.  `SAMFileReader` still functions as normal.
- See `SamReaderFactory`'s javadoc for examples of how to use it.