Internal optimizations for the SAM parser.

Summary:
Change the cache for the records from being an array to being scalar.
Check for undefined value for strand to avoid warnings
Change the interface of Data::File::SAM::Record for optimization

Summary
The idea behind this series of optimizations is that in most cases when
a user loops over a SAM file he/she usually requires only a handful of
the exact SAM record fields and therefore the overhead of creating all
fields as attributes and calculating every single value on object instantiation
is to high. For this the SAM::Record accessors have been simplified to just a redirection
to the SAM::Record fields array (very fast) and everything else is calculated
from these fields on first request.
Remove methods from SAM parser that were specific for BWA aligner

Summary
Removed methods: number_of_best_hits, number_of_suboptimal_hits, alternative_mappings
Refactor class "CigarAndMDZ", create new classes "Cigar" and "MDZ"
SAM parser now supports variable record classes (dependency injection)
Make SAM record aware of all CIGAR operators. Bug fixes. Documentation
Merge branch 'refactor_sam' into develop