Improve forwarding of property changes in QNodePrivate.

Instead of using a hash and the slow senderSignalIndex() to map
slot invocations to property indices, we now use a dedicated
PropertyChangeHandler class to connect to the notify signals of
properties. This one uses a trick similar to QSignalSpy and the
SignalHandler in Qt WebChannel for efficient mapping of slot
invocations to any other integer index. Here, we chose the property
index.

Note that for now, we change the QScenePropertyChange to use a
const char* instead of a QByteArray for the property name. Otherwise
we'd incur a conversion penalty for every property change event,
as QMetaProperty stores the name as a const char*. To fix this odd
API, we should eventually refactor the other abuses of
QScenePropertyChange to use dedicated change classes. Then we can
use QMetaProperty directly.

Change-Id: I9257a48e3852f29427006a7f761bca272d5c4f4e
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Cleanup: Use Q_Q(QNode) instead of qobject_cast<QNode*>(q_ptr).

This uses a static cast internally, instead of the qobject_cast.

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