Cram code base

Just rebased the branch from master. Briefly:
- adds new htsjdk.samtools.cram package that contains CRAM backend like codecs, structures and thins
- adds CRAM type in SamReader
- CRAMFileReader and writer implementations
- changed visibility of TagValueAndUnsignedArrayFlag, used in the cram package
I don't see these two being used anywhere.
```
import htsjdk.samtools.BAMFileReader.BAMIteratorFilter;
import htsjdk.samtools.BAMFileReader.FilteringIteratorState;
```