Checkpoint: Logistic regression running correctly with 2 nodes.

- A host of fixes to bring the distributed runtime up to speed with
  other recent changes.
- Adding serialization for DeliteFileInputStream
- Passing type of DeliteArrayObject in the array message so that
  they can be generically deserialized (when inputs to kernels).
- Using remote reads for both slave and master non-local accesses
- Significant changes to stenciling and partitioning
- Passing aliases through the DEG for use in partitioning
- Upgrading to latest Hadoop / Protobuf versions
Improvements to partitioning algorithm

- Now passing all staging aliases through DEG unmodified
- Locality preferring: stay local if array inputs are local
- Logreg is being partitioned correctly
Checkpoint: Distributed Logreg working with multiple slaves.

- Added a configurable struct reduction method (dc_combine) and
accompanying changes to thread the struct manifest through.

- Modified dc_data_field and dc_size_field to only require
a manifest. This turned out to be unnecessary, but should be
a little cleaner.

- Bug fixes to distributed scheduler and arrays
Merge branch 'optiml-clusters' into wip-clusters2

Conflicts:
	runtime/src/ppl/delite/runtime/graph/ops/OP_MultiLoop.scala
	runtime/src/static/scala/io/DeliteFileInputStream.scala