Fix bugs in ComponentsEntityCollection

1. `onCollectionChanged` handling was not properly resetting a value to undefine for each iteration of a for loop, leading to the first entity incorrectly being the target for all merged properties.
2. Fix bug in `Entity.merge` which was causing custom properties registered on the source entity to not propagate to the target entity if they did not already exist.
3. Added specs to expose both issues.

Fixes #2180

@shunter I didn't modify`_propertyNames` as we discussed offline because (as it stands right now) that array should only contain optional properties, where as id/availability/parent/name/etc.. are all considered required to exist (even if left undefined).  We can revisit this separately in the future.