BUG-650: optimize DOMForwardedWriteTransaction
First make sure we get visiblity into cohorts as a collections. This
allows us to optimize allocation of the list where we hold the futures.
We also make it non-immutable -- it is handed off, so there is no reason
to pay the price of an additional allocation.
Second we optimize the transaction state checking by eliminating as
many volatile read/writes as possible. The bottom line is the following:
1) the put/merge/delete paths see only a single volatile read instead of
two
2) the submit path performs only one volatile get+set and an ordered
write -- instead of two reads and two writes
3) the cancel path performs a volatile get+set and either an ordered
write (fast path) or a spin on volatile read (slow path) -- instead of
a synchronized block, four volatile reads and two volatile writes
Change-Id: I5ec875e65acdee62a4f0daf233617e6af024637f
Signed-off-by: Robert Varga <rovarga@cisco.com>