PARQUET-139: Avoid reading footers when using task-side metadata

This updates the InternalParquetRecordReader to initialize the ReadContext in each task rather than once for an entire job. There are two reasons for this change:

1. For correctness, the requested projection schema must be validated against each file schema, not once using the merged schema.
2. To avoid reading file footers on the client side, which is a performance bottleneck.

Because the read context is reinitialized in every task, it is no longer necessary to pass the its contents to each task in ParquetInputSplit. The fields and accessors have been removed.

This also adds a new InputFormat, ParquetFileInputFormat that uses FileSplits instead of ParquetSplits. It goes through the normal ParquetRecordReader and creates a ParquetSplit on the task side. This is to avoid accidental behavior changes in ParquetInputFormat.
I talked with Julien about this and it was written by modifying the version that has the row group start locations, so it is a little different but not in an important way. There are also some oddities with it. For example, if the next block boundary is less than min, then the maximum size is used instead of min. Assuming min is normally 1 byte, this won't happen too much, but there are other more serious ones.

If the block size is greater than max, then it will end up allocating a max-sized input split. Then the next block boundary is probably less than max and greater than min (usually 1 byte) so we get an input split for the remainder of the block, which doesn't seem right. For example, say the block size is 9k and the max is 8k. Then we get one split for 0-8k and then one split for 8k-9k. At that point, it starts over, and creates one split for 9k-17k and one split for 17k-18k. This gets wackier if min is greater than 1. Say min is 4k. Then we get 0k-8k, 8k-16k, 16k-24k, 24k-32k, and then a half-sized 32k-26k.

I don't think this helps efficiency, so it is preferable to go with the basic file splits that are well understood and produce equal-sized tasks. We might want to change this when we align row groups with block boundaries, but I don't see much point until then.