this happens if an object is a map/list containing itself (which blows up in the case of HashMap already when it computes hashCode of itself!).  so

(a) it should rarely if ever happen; and (b) anything we return will be better than blowing up

inclined to leave it, and we can change it if ever needed (which i doubt)

note we could indicate which ancestor is the repeat by inspecting the stack, if we make it a `LinkedHashSet`.