Simple non-kernel-assisted (a.k.a userland) RCU library in Go.
Implementing RCU on garbage collected languages is actually quite simpler than
usual as we do not need to handle quiescent states (the garbage collector
handles that for us). So all we need is make atomic swaps so everything is
neatly lock-less but still thread-safe.
SetIfNilValue sets the value pointer associated with Data[T] to the given
value iff the current value pointer is nil. Returns true if the value was
set and false otherwise.