differential-dataflow 0.0.3

An incremental data-parallel dataflow platform
Documentation

differential dataflow todo list:

1. Test Join using only keys from stream, not values. involves looking up values in input trace, but permits not copying/sending values.
2. Prototype compacting trace, using existing parts.
	a. Establish benckmark computation on which non-compacting computation does badly.
	b. Move radix_sort functionality into trace, so that trace has ability to compact.
	c. Prototype co-locating (but not compacting) trace to see impact of memory locality.
	d. Prototype compacting trace to see impact of reducing memory / compute footprint.
	e. Detail issues about "real time" guarantees: how much work might be done at once?
3. Fix CoGroup: requires fixing `interesting_times` to take least_upper_bound of times from both traces.
4. Benchmark Consolidate in-place compaction; create a benchmark on which it performs better than appending.
5. MonotonicVariable implementation; not clear if easy to do without building Distinct into it.
6. Prototype returning iterators from Join/Group/etc: goal is to cut peak memory utilization in e.g. graph exchange.
7. Join and Group use HashMap rather than the RHHMap; if possible, swing them over for higher througput lookups.

[ISSUE] Group produces Arranged data, but it is non-trivial to extract data stream if you want non-arranged data. It is also non-trivial to produce the data in the first place if noone wants it.

A. [FUTURE] Alg3 differential seems logically easy, but might be tricky to coordinate operator notifications.
B. [FUTURE] Multiple times in messages seems possible, could improve throughput of fine-grained updates. Prototype benchmark.