PARQUET-123: Enable dictionary support in AvroIndexedRecordConverter

If consumers are loading Parquet records into an immutable structure
like an Apache Spark RDD, being able to configure string reuse in
AvroIndexedRecordConverter can drastically reduce the overall memory
footprint of strings.

NOTE: This isn't meant to be a merge-able PR (yet). I want to use
this PR as a way to discuss: (1) if this is a reasonable approach
and (2) to learn if PrimitiveConverter needs to be thread-safe as
I'm currently using a ConcurrentHashMap. If there's agreement
that this would be worthwhile, I'll create a JIRA and write some
unit tests.

Author: Matt Massie <massie@cs.berkeley.edu>

Closes #76 from massie/immutable-strings and squashes the following commits:

88ce5bf [Matt Massie] PARQUET-123: Enable dictionary support in AvroIndexedRecordConverter
PARQUET-121: Allow Parquet to build with Java 8

There are test failures running with Java 8 due to http://openjdk.java.net/jeps/180 which changed retrieval order for HashMap.

Here's how I tested this:

```bash
use-java8
mvn clean install -DskipTests -Dmaven.javadoc.skip=true
mvn test
mvn test -P hadoop-2
```

I also compiled the main code with Java 7 (target=1.6 bytecode), and compiled the tests with Java 8, and ran them with Java 8. The idea here is to simulate users who want to run Parquet with JRE 8.
```bash
use-java7
mvn clean install -DskipTests -Dmaven.javadoc.skip=true
use-java8
find . -name test-classes | grep target/test-classes | grep -v 'parquet-scrooge' | xargs rm -rf
mvn test -DtargetJavaVersion=1.8 -Dmaven.main.skip=true -Dscala.maven.test.skip=true
```
A couple of notes about this:
* The targetJavaVersion property is used since other Hadoop projects use the same name.
* I couldn’t get parquet-scrooge to compile with target=1.8, which is why I introduced scala.maven.test.skip (and updated scala-maven-plugin to the latest version which supports the property). Compiling with target=1.8 should be fixed in another JIRA as it looks pretty involved.

Author: Tom White <tom@cloudera.com>

Closes #77 from tomwhite/PARQUET-121-java8 and squashes the following commits:

8717e13 [Tom White] Fix tests to run under Java 8.
35ea670 [Tom White] PARQUET-121. Allow Parquet to build with Java 8.
PARQUET-122: make task side metadata true by default

Author: julien <julien@twitter.com>

Closes #78 from julienledem/task_side_metadata_default_true and squashes the following commits:

32451a7 [julien] make task side metadata true by default
PARQUET-135: Input location is not getting set for the getStatistics in ParquetLoader when using two different loaders within a Pig script.

Author: elif dede <edede@twitter.com>

Closes #86 from elifdd/parquetLoader_error_PARQUET-135 and squashes the following commits:

b0150ee [elif dede] fixed white space
bdb381a [elif dede] PARQUET-135: Call setInput from getStatistics in ParquetLoader to fix ReduceEstimator errors in pig jobs
PARQUET-132: Add type parameter to AvroParquetInputFormat.

Author: Ryan Blue <blue@apache.org>

Closes #84 from rdblue/PARQUET-132-parameterize-avro-inputformat and squashes the following commits:

63114b0 [Ryan Blue] PARQUET-132: Add type parameter to AvroParquetInputFormat.
Update parquet-avro to allow null map values.
Update Avro list support to 3-level representation.

This updates Avro to use the 3-level LIST representation specified in
parquet-format. This adds a new method to ConversionPatterns,
listOfElements, that automatically inserts the "array" level required by
the spec and deprecates the listType method that requires users to pass
in a repeated group and allows using the repeated group's type for
elements.

For backward-compatibility, the Avro implementation now checks whether
the repeated group in a LIST structure is the element type using the
rules defined in the parquet-format spec: if the repeated type is a
primitive or a group with more than one field, then it is used as the
element type. Otherwise, the group is assumed to be a wrapper around the
element type.

The write path has been updated to support null values in arrays similar
to the last commit.

The tests have been updated to add an array of optional values, but
existing types have been left unchanged in places, like
testAllUsingDefaultAvroSchema, to validate where possible that existing
data can be read.

This still requires:
1. More tests for backward-compatibility
2. Support for repeated types without the LIST annotation
PARQUET-113: Add more array backward-compatibility tests.
PARQUET-113: Add backward-compat for parquet-avro list.

This adds backward-compatibility for the case where parquet-avro wrote
an ambiguous structure annotated by LIST. The Avro schema in the file's
metadata shows that the one-field record contained in the list should be
interpreted as an actual record, rather than ignored as a synthetic
group for the 3-level representation. This can also be triggered by
setting the Avro read schema.

Now the only case where parquet-avro will not correctly read data
written by parquet-avro is when the synthetic list is present and the
Avro schema also contains a single-field record and that field is named
"element". This case is extremely unlikely.
PARQUET-113: Add config prop for new read behavior.
PARQUET-113: Revert parquet-avro write updates.