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.


let's do this for now and improve later.