Handling of property reference changes

When a QML property that is part of the Components list of an Entity
changes reference, this triggers a QQmlListProperty clear followed
by a QQmlListProperty append of each Component.
In turn, foreach Component added, a notification ComponentAdded is submitted
to the QChangeArbiter. The Arbiter notifies the RenderNode observing the
frontend Entity so that the backend can be rebuilt.

RenderNode handles the ComponentAdded, ComponentRemoved notification as it
is the only backend element linked to the corresponding frontend Entity. That
means that when such an event occurs, it has to check for the type of
Component being added or removed and update the corresponding backend classes
(RenderMesh, RenderCamera, RenderMaterial ...). This is a design choice so as
to avoid having all backend render classes have a reference to the frontend
Entity. Also reference property changes should be fairly rare and handling all
of those in RenderNode reduces notification traffic.
On the other hand, ComponentUpdate notifications are handled directly by the
backend classes (RenderCamera, RenderMesh ..).

Note : Please make sure that the property whose reference is changed is
actually part of the components list of the Qml Entity so as to avoid losing
time not understanding why updates have no effect.

Also, the QChangeArbiter takes a binary flag QChangeFlag when registering an
observer. The flags can be a combination of common events. It is then up to
the observer to check upon reception of a notification, the subject, property
name and the value contained in the QSceneChangePropertyEvent.

Change-Id: I0bff49d753c439999d6745af03d14d4ae36a118a
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>