[FLINK-1285][FLINK-1137] Make execution mode configurable

These commits enhance the MutableObjectIterator with a next() method that creates a new object for every call.

The ExecutionEnvironment is updated to have an ExecutionConfig. This allows changing of execution parameters, such as whether the ClosureCleaner should be used and whether objects should be reused.

All Drivers are updated to support both object-reuse mode and non-object-reuse mode. Before, some operators did reuse (map, join...) while some (reduce) had a hidden non-reuse mode. Right now, the reuse mode is set per-job, if necessary, this could also be done on a more fine-grained basis.

Documentation is still missing. I want to do that in a separate commit. Also, I'm waiting for a cluster to run some tests to see what the impact is of using object-reuse vs. non-object-reuse.