timer: handle list reordering more cleanly.

Instead of reordering the list after tasks are run, simply recreate the
list by adding tasks back. (There may be a larger performance overhead
this way?)