Improve performance of QtCallbackProxy::bind() when the proxy has many bindings

Re-allocating the binding array was expensive.
Simplify QtMetacallAdapter and make copying cheaper by using
ref-counting.
Improve performance when many QtCallback instances are created

Use QWeakPointer instead of QPointer under Qt 4.
Under Qt 5, QPointer is implemented using QWeakPointer.
Reduce cost of QtCallbackProxy::bind() when signature is already normalized

As QObject::connect() does, try to get the signal index with the
provided signature first before constructing the normalized version.
Make QtCallbackProxy cheaper forwarding when there are many connected senders

Use a map from sender to binding rather than a list of bindings to
reduce lookup cost for bindings to O(#connected signals for sender)
instead of O(#bindings) in QtCallbackProxy::qt_metacall()
Remove bindings when the sender is destroyed

Connect to the destroyed(QObject*) signal and remove
any bindings for the sender when this signal is retrieved.

In Qt 4 at least, this method is not called when an object is destroyed.
Add a function for benchmarking QtCallbackProxy and some perf notes

Although the cost of connecting and disconnecting signals is not
affected by the number of senders in current versions of Qt 4,
the QObject::sender() and senderSignalIndex() functions are linear
in the number of senders.