Reworked the callback support code to always use a background thread and thus be a more generic task system