Adding utilities for read trimming.
Merge pull request #248 from fnothaft/read-trimming

Adding utilities for read trimming.
ADAMFlatGenotype is a smaller, flat, simpler version of a genotype schema.

Also:
1. Added support for missing genotypes in the VCFLineConverter for ADAMFlatGenotype.
2. Added a ReferenceMapping for the ADAMFlatGenotype
3. the flat genotype converter uses multiple writers for smaller output files.
Fixed FieldEnumerationSuite, which was broken on the upgrade to Parquet 1.4.3
Adding a dependency on the AWS Java SDK.

Our implementation of the Parquet-based RDD is going to need this.
Upgrading Avro dependency to 1.7.6

Need this for the conversion routines we'll use in the ParquetRDD classes.
Adding ByteAccess trait and implementations.

ByteAccess is a trait representing "sources of bytes" for which random access is available,
e.g. local files, S3, etc. This is going to be used to wrap different data storage back-ends,
for raw byte access and allowing us to go around the hadoop library itself.
SerializableAWSCredentials is an AWSCredentials which is Serializable.

We're going to need to pass around (serializable) credentials for S3, in order to
implement our ParquetRDD that reads directly from S3.
CredentialsProperties encapsulates reading AWS credentials from configuration.

This is a wrapper class, designed to allow us to recognize and retrieve credentials from the environment,
config files, or other sources.
Added FileLocator and implementations.

FileLocator, and its implementations, are a common wrapper around local Files, classpath locations,
bucket/keyname pairs in S3, and static byte arrays (for testing).  This is a way (also serializable)
for naming the location of parquet files and indices in different systems.
Scala reimplementation of the Parquet footer parsing.
Parquet and indexed Parquet RDD implementations, and indices.

AvroParquetRDD.scala contains two RDD implementations around Parquet files.  The first,
AvroParquetRDD, reads a single Parquet file (containing an Avro schema) and partitions the RDD
based on the row groups of the file.

The second, AvroIndexedParquetRDD, is an implementation that reads an index across a set of
parquet files, determines (according to the predicate contained in CombinedFilter) which row groups
in which files are relevant to the query, and produces an RDD whose partitions are in 1-1 correspondence
with the matching row groups from the index.

The parquet_reimpl/index package contains the code necessary for reading and writing indices.
Adding two CLI commands, including an index generation command.

Adding two new CLI commands:
1. IndexFlatGenotype, which reads in a flat genotype Parquet file, and produces the index for that file.
2. the PrintParquet, which reads a Parquet file and prints out a limited number of entries form the file.

(at the moment, the latter only supports ADAMFlatGenotype)