* create a new method in CallBack which does the cbdataReferenceValid()
for us
* remove the extra cbdataReference/cbdataReferenceDone() in the comm
connect codepath: this was exposing a bug with how cbdataReferenceDone()
operates. In a nutshell, its a macro which sets the value to NULL after
decrementing its refcount because, after that function call, the memory
may have been freed. The problem was that we were doing it on the data
pointer in a CallBack instance and so the instance never had a chance to
remove _its_ reference count on the data because, at the time the
destructor is called, the data pointer has been made NULL.
Not nice.
* Fix the comm connect finish routine to properly get rid of any CallBack
which may be allocated. cbdataReferenceDone() would NOT have been
sufficient if the connection had timed out - we'd still have been left
with an extra refcount without the above modifications.