Fix DList.distinct (#183)

In exchange for having quadratic worst case (all collisions) it's nice and fast for the normal case, and doesn't need to replicate the value to the reducer Key. It now uses linear memory to either the size of the mapper input, or size of collisions -- so i think that's pretty reasonable.