Waits until the fence is complete, or till the timeout specified. The fence wait transaction will get re-tried
several times until the timeout.
If a fence wait times out then it means there are still some readers with in-progress transactions that have not
seen the change. In this case the wait will have to be retried using the same FenceWait object.