[FLINK-1060] Added methods to DataSet to explicitly hash-partition or rebalance the input of Map-based operators.

Adds three methods to DataSet:
- `DataSet.partitionByHash(int...)`
- `DataSet.partitionByHash(KeySelector)`
- `DataSet.rebalance()`

The methods create a PartitionedDataSet on which Map-based operators can be applied (`filter()`, `map()`, `flatMap()`, and `mapPartition()`).

Feedback welcome.
I will add documentation once code changes are considered to be good to be merged.