WeakValueIdentityDictionaries behave like IdentityDictionaries,
as long as the values are still referenced by some
other (non-weak) object.
However, once the last non-weak reference ceases to exist,
the Dictionary will return nil for the value at position key.
(with some delay: it will be removed after the next garbage collect).

If you use this, be very careful since the collections size changes
'magically' - for example, testing for being nonEmpty and then
removing the first element may fail, since the element may vanish inbetween.
In general, never trust the value as returned by the size/isEmpty messages.