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'm cleaning this up a bit but don't want to remove lazy init because the nof of records per container is known only after container has been read CramIO.readContainer(is). An alternative would be to introduce a new constant, but since readContainer is a heavy op lazy init should be ok.