Separate the notion of 'are side-effects visible' from 'transaction id'

We want to be able to make snapshots where no side-effects are visible
without having to physically allocate a transaction id, since allocating
ids is persisted and therefore (a) is expensive; and (b) infects
everything with the Lwt type.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>