getIndependentInstance

Gets a reference to an instance of this object which can be used
simultaneously from a second thread while this instance is being used from
"its" thread. This "independent instance" may be a deep copy, a shallow
copy, or even the same instance every time, depending on the nature of the
object.

It is expected that subclasses which override this method will narrow the
return type appropriately. We do not enforce this at compile time via
recursive generics due to their complexity: they introduce a host of
typing difficulties.