Allow async commands to run forever without watching

There is a bug fix in here that should be accepted either way,
that remaining <= 0 rather than remaining == 0 (as otherwise
any async value not divisible by 5 never terminates)

The remainder of this commit relates to issue 4778

To make async: 0 actually work requires some logic changes because
currently a value of 0 for async_seconds means run synchronously.

The main change here is to not check whether to kill the child
process and let it live forever. The parent processes do remain in
place.

However, an alternative is daemonize in bash with a simple script
of the form and not run it asynchronously at all
```
setsid command args &
disown !$
```