only add unique objects when first detected

The current implementation relies on `MutableEnumerable#addObject` to
decide whether to actually add the candidate object to the computed
array. This causes a walk of the accumulated array on each call to
`addedItem()`.

Since the item counts are being tracked anyhow, there is no need to call
`addObject()` except the first time it is known that the item should be
in the array.
use pushObject() instead of addObject()

Since we're only adding to the accumulated array when we know that an
element belongs, there is no need to invoke `addObject` at all since it
will result in a walk of the array.

This adds a test case to make sure that the computed union is not
searched at all while it is being built.