NCBC-257: Refactored the Dispose/Finalize logic

The purpose is to ensure that objects that have been disposed,
do not live until finalization. From my testing, this allievates
the timeout and other socket errors that were occuring. I also
adding logging in all empty catch() blocks which should help
debugging.

Change-Id: Iaef5080ec7a7efdb0377df4392e4798e37071a53
Reviewed-on: http://review.couchbase.org/29197
Reviewed-by: Matt Ingenthron <matt@couchbase.com>
Tested-by: Matt Ingenthron <matt@couchbase.com>