Temporary workaround for race condition when deploying tasks

Tasks are deployed simultaneously without any synchronization yet expect to
be able to always connect their output channels to other tasks that might
still be setting up...
Test for shuffeling after fold + improved operators
Integration of HDFS connector
Added operator compactification of linear chains
Fixed operator instantiation for compactified tasks
OperatorResult, group handling with chained tasks, fixes, tests

OperatorResult: Physical Operators are no longer returning either an
element or null to indicate that either a group or the entire stream
is finished, but return OperatorResults (either wrapping an element
or a group end marker or a stream end marker). This significantly
simplifies the code (especially the OperatorDriver), but also each
operator as we're no longer waiting for null but for END_OF_STREAM.

Group ends are now translated from and to the marker class transferred
across nodes by the GateReaderOperator and the RecordWriter. All
operators that expect grouped input only need to now about the
OperatorResult markers.

Also fixes an issue with the HDFSSink (input wasn't opened) and the
HashJoin operator (input 2 key set wasn't used).

Also adds some dataflow tests for compactified tasks as well as
Distinct, Difference, and Union.