[SPARK-2759][CORE] Generic Binary File Support in Spark

The additions add the abstract BinaryFileInputFormat and BinaryRecordReader classes for reading in data as a byte stream and converting it to another format using the ```def parseByteArray(inArray: Array[Byte]): T``` function.
As a trivial example ```ByteInputFormat``` and ```ByteRecordReader``` are included which just return the Array[Byte] from a given file.
Finally a RDD for ```BinaryFileInputFormat``` (to allow for easier partitioning changes as was done for WholeFileInput) was added and the appropriate byteFiles to the ```SparkContext``` so the functions can be easily used by others. 
A common use case might be to read in a folder 
```
sc.byteFiles("s3://mydrive/tif/*.tif").map(rawData => ReadTiffFromByteArray(rawData))
```
I have thought about the issue some more and due to the restructuring of the PR to use these PortableDataStreams. I now think that rather than implementing this abstract class, a better solution would be to take advantage of implicit class conversion and create for example implicit class PortableTiffReader(pds: PortableDataStream) with the method readAsTiff.
-  keeps the implementations of readers independent from the underlying filesystem and serialization issues.
- easier to add new file formats which can be imported with a simple import and used from binaryFiles directly.