hadoopcompatibility: Implementations of basic programming interfaces and...

... a basic driver.

* wrappers for Mapper, Reducer and Combiner (as a local Reducer) on the new Java API
* wrapper for OutputCollector
* wrappers for Partitioner, values comparator.
* a driver making it posible to run unmonitored (so far)  Hadoop jobs on Flink.
* tests and variations of the WordCount driver exclusively in Hadoop.

You can find more about the Google Summer of Code project here:  https://issues.apache.org/jira/browse/FLINK-838?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14031511
The partitioning / grouping code does not look right to me.
It does `mapOut.groupBy(partitioner).reduceGroup(identity).groupBy(groupingKeySelector)`

`groupBy()` does both, partitioning and grouping, in the Flink API. The partitioning of the first `groupBy()` is destroyed by the second `groupBy()`. So the only thing that will happen is that the data is shuffled and sorted twice which is very expensive. We need to find a clever way to combine the HadoopPartitioner and the HadoopGroupingKeySelector into a single `groupBy()` operation or extend the Flink API to be able to specify both independently.