Optimize memory consumption in disagreement processing

Previously the full map from review to marks was constructed,
thus resulting in storing all marks records at peak. Now we use
the fact that marks are ordered by time in runtime storage and
if we observe marks for patch N it means that all from N-1 were
seen before. Thus the maximum memory allocation is reviews count
multiplied by number of marks in last patches (approximately
by average number of patches less then before)

Part of blueprint memory-optimizations

Change-Id: Ia33001f57b0d92f6ff562f8c51aecba5875e8825
Merge "Optimize memory consumption in disagreement processing"