Add Read to transaction
Add Read to transaction

When performing a transaction it's useful to read the current value
of keys before deciding what update to make. Previously we had to
separately generate a snapshot and read that which was much more
code.

As a bonus this also communicates to the server the keys which the
transaction "depends" on: a merging algorithm may choose to take this
into account when deciding whether a transaction can be safely merged.
For example a transaction which reads a value from one key and writes it
to another (e.g. a bank account transfer) ought to conflict with another
transaction which modifies the source key.

Signed-off-by: David Scott <63c9eb0ea83039690fefa11afe17873ba8278a56@docker.com>

docker/datakit,docker/datakit,docker/datakit