A main structure which implements CoW approach based on [RwLock]. The object
stored inside can be read directly, but modifying the inner value is
performed using CoW copy-on-write approach.
A write-guard which holds new value to which the new data is written. And
previous value too. This type of guard is not exclusive, so multiple
CoW operations may be performed in parallel which is not normally needed.
A Single thread realization.
A read only guard. Implements Deref only. The guarded value is valid
all the time, even if the inner value was updated. The updated value
will not be visible in the current instance until re-read is
performed.