[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))
```
In that case, add `@DeveloperApi` to it to make clear that this is an internal API. In general Spark provides very strong API compatibility guarantees (https://cwiki.apache.org/confluence/display/SPARK/Spark+Versioning+Policy) so we don't try to expose stuff unless we have to. Specifically, unless you make this DeveloperApi, you wouldn't be able to break the API or the semantics of this class in future Spark releases. For DeveloperApi we allow that, though we still discourage it, because we warn users that it might change.