setup-remote-repo with nodups script.
Fixed glitches in nodups

To make it work even
- there're files with bad permission, e.g., `ugo=`.
- some files vanishes and cannot be stat(2) any more.
- $HOME/.gitconfig becomes inaccessible, e.g., AFS.
Refactored ssh-cluster runner

- `eachInParallel` and `waitAll` for managing parallel jobs (ssh, rsync, etc.)
- `ssh-3x-remote` for `sshRemote ... 3x remote ...` invocations
- _3X_LOGLVL adjustments for appropriate log messages
- allowing comments in remotes list
ssh-cluster runner filters unavailable remote hosts
ssh-cluster runner scheduling non-uniformly

based on CPU speed, #CPUs, load average of each remote host
ssh-cluster runner marks finished remotes at sync time

instead of counting how many are unfinished every time.
ssh ControlPath being too long can be problematic
Resolving _3X_WORKER_DIR to absolute path
Made resuming possible for base.async runners

By reusing an enhanced base.multi runner's dequeue.  Interrupting
`queue-start` can mark all runs as ABORTED if `start-all` fails, and
a later `queue-start` invocation can reschedule them.  Actual base.async
runners can touch the `scheduled` file as soon as they schedule some
runs, so it won't be rescheduled and can be synced/stopped later.

It seems a new state (SCHEDULED?) for runs is necessary to indicate the
run has been scheduled but not yet RUNNING.  `refresh-all` can quickly
poll how many are actually RUNNING and still waiting at SCHEDULED.
Then, `refresh-all` would probably also need to mark runs that have been
found finished but whose records were not fetched/synchronized to the
repository yet (as FINISHED?).  Ideally, it should be possible to change
the order of SCHEDULED runs, but not the ones in the other two: RUNNING
or FINISHED.
Placeholders for base.async extension points