PARQUET-52: refactor fallback mechanism

See: https://issues.apache.org/jira/browse/PARQUET-52
Context:
In the ValuesWriter API there is a mechanism to return the Encoding actually used which allows to fallback to a different encoding.
For example the dictionary encoding may fail if there are too many distinct values and the dictionary grows too big. In such cases the DictionaryValuesWriter was falling back to the Plain encoding.
This can happen as well if the space savings are not satisfying when writing the first page and we prefer to fallback to a more light weight encoding.
With Parquet 2.0 we are adding new encodings and the fall back is not necessarily Plain anymore.
This Pull Request decouple the fallback mechanism from Dictionary and Plain encodings and allows to reuse the fallback logic with other encodings.
One could imagine more than one level of fallback in the future by chaining the FallBackValuesWriter.

Author: julien <julien@twitter.com>

Closes #74 from julienledem/fallback and squashes the following commits:

b74a4ca [julien] Merge branch 'master' into fallback
d9abd62 [julien] better naming
aa90caf [julien] exclude values encoding from SemVer
10f295e [julien] better test setup
c516bd9 [julien] improve test
780c4c3 [julien] license header
f16311a [julien] javadoc
aeb8084 [julien] add more test; fix dic decoding
0793399 [julien] Merge branch 'master' into fallback
2638ec9 [julien] fix dictionary encoding labelling
2fd9372 [julien] consistent naming
cf7a734 [julien] rewrite ParquetProperties to enable proper fallback
bf1474a [julien] refactor fallback mechanism