PARQUET-4: Use LRU caching for footers in ParquetInputFormat.

Reopening https://github.com/Parquet/parquet-mr/pull/403 against the new Apache repository.
We need a good way to make those two use cases coexist.
In the existing code we take the state of the files when the job starts and keep it as a reference:
 - if files are appended to, it is better to have a SNAPSHOT view of the files.
 - if files are rewritten, in Hive I would expect partitions to be replaced rather than files directly. Otherwise running jobs are likely to fail. rewriting files without metadata coordination is a bad idea IMO.
We are caching these Footers to reduce the number of files read and requests to the name node. With this patch we are going to increase a lot the number of requests to the namenode.

I would recommend the following:
 - use the result of listStatus() as a reference to invalidate your cache (```List<FileStatus> statuses = listStatus(jobContext)```). That way you have a snapshot view of the files at the time you're looking up the footers.
 - do not call the name node for every individual part file (no ```fs.getFileStatus(path);```). There could be thousands of those (if not more).