Fix places where a tasklet_goto might lead to the tasklet being destroyed

After 1821ba5f, tasklets often get entered with code like:

    mutex_lock(&x->mutex);
    tasklet_goto(&x->tasklet, blah);
    mutex_unlock(&x->mutex);

Which is fine, as long as the tasklet function cannot destroy the
structure 'x'.  In that case, the mutex_unlock will lead to problems.

Instead, such cases can use tasklet_later to start the tasklet.  It's
marginally more costly, but doesn't require the lock to be held.