Use LRU caching for footers in ParquetInputFormat

Remove footers instance variable.  This instance variable causes issues when the same ParquetInputFormat instance is used to generate splits for different files.  More specifically, it causes problems in Hive's FetchOperator when the FetchOperator is attempting to operate over more than one partition.  This issue is described in more detail at https://groups.google.com/d/msg/parquet-dev/0aXql-3z7vE/Gn5m094V7PMJ
Note that I've removed the synchronization from all of the methods associated with this class.  When I first implemented this cache, I was using it in a block of code that was reading footers in parallel.  In the current revision the map is not being used by multiple threads and I've removed the synchronization based on the following rule of thumb (from Effective Java by Joshua Bloch):

You should make a mutable class thread-safe if it is intended for concurrent use and you can achieve significantly higher concurrency by synchronizing internally than you could by locking the entire object externally. Otherwise, don't synchronize internally.