Adding And/Or Index predicates
Moved And/OrIndexPredicate classes into the IndexEntryPredicate.scala file

Since these case classes aren't specific to RangeIndex, I figured they shouldn't be in the RangeIndex.scala file.
Adding support for Projections in the IndexFlatGenotype and RangeIndexGenerator implementations.
Added a parentLocator method to FileLocator.
Adding assertions for better error reporting, to InputStreamByteAccess.
Modifications to speed up the RangeIndex creation.

Two major changes:
- use foldLeft instead of foldRight
- using the new ReferenceFolding framework, in order to lower the
  pressure put on garbage collection by the large number of extra
  objects that were being created.
Added the ParquetLister utility and print_parquet command.

Ultimately, ParquetLister will be the way we abstract out different index builders.
Removed the use of BoundedInputStream from ByteAccess