Allow async tasks to preserve original setTimeout

With these changes, we can preserve the setTimeout function used
internally on  on the registerTask context.

Without this patch, any task replacing setTimeout might break grunt
in order to not trigger the task.done event.