Refactor DataWorker helper and memleak cleanups
Finish takes an optional callback for signalling when the dataworker is finished cleaning itself up