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()` since it is known that the item should be in the
array. Instead `pushObject()` is called once at the right time.