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.