Changed DespatchedTypedData DataPtr & argument to Data *.

We should only be passing DataPtr & to signify a sharing or ownership, which is not generally the case with DespatchTypedData. This avoids the unnecessary creation and destruction of smart pointers, which in turn make unnecessary addRef() and removeRef() calls, which do have an overhead.

Also replaced some implicit conversions of Ptr to * with explicit calls to Ptr.get(), in preparation for a move to boost::intrusive_ptr.