The three possible states of a task are determined by the ->status
and ->dead fields of struct task:
status >= 0, !dead: running
status >= 0, dead: dead (about to be removed from the task list)
status < 0: zombie (dead, but not yet reaped, -status is an error code)
This commit encodes the first two states as two non-negative numbers,
so that the three states become
status == TS_RUNNING: running
status == TS_DEAD: dead
status < 0: zombie
This allows to remove ->dead which improves readability somewhat.