abdi_processrepoargs: publish fetch_if_needed

Make it possible to re-use abdi_processrepoargs.fetch_if_needed() by
making it public.

Test Plan:
$ ./precommit.sh
fixup! WIP: add arcyd fetch command
Arcyd: refactor passing of repo paths

Pass a straight-forward list of config file paths through to
abdi_processrepos, instead of faking command-line arguments and then
decoding them again.

Test Plan:
$ ./precommit.sh
$ ./testbed/arcyd/acceptance_tests.sh

check repos are loaded in dashboard with
$ ./testbed/arcyd/loop_test.sh
Arcyd: refactor, mv parse_config_file_list out

Move abdi_processrepolist._load_repo_configs to
abdi_repoargs.parse_config_file_list, this makes it re-usable from other
modules in a more expected place.

Test Plan:
Make sure repositories args are parsed by running these
$ ./precommit.sh
$ ./testbed/arcyd/acceptance_tests.sh
Arcyd: fix phlurl_watcher__t flakiness

'test_A_Breathing' appears to be flaky in this test driver - depending
on random numbers to always be different.  Fix it to use numbers that
are guaranteed to be different.

Test Plan:
$ ./precommit.sh
phlurl_watcher: 'request object' for testability

Instead of taking a 'request function' for testing, update
phlurl_watcher.Watcher to take a requester object which could also be
the phlurl_request module.

This enables coverage of the 'refresh' method as well, which requires a
'get_all' method.

Test Plan:
$ ./precommit.sh
phlurl_watcher: add FileCacheWatcherWrapper

Make it easier to work with a url watcher by adding a wrapper that takes
care of loading and saving.

Test Plan:
switch breathing test to use the new wrapper
$ ./precommit.sh
Arcyd: use phlurl_watcher.FileCacheWatcherWrapper

Replace explicit calls to Watcher.load() and dump() with usage of the
new FileCacheWatcherWrapper.

Move the decision of where to store the urlwatcher_cache_path to
abdt_fs.Layout.

Test Plan:
$ ./precommit.sh
$ ./testbed/arcyd/acceptance_tests.sh
$ ./testbed/arcyd/loop_test.sh

make sure snooping still works by poke and accepting in
$ ./testbed/arcyd/test_shell.sh
abdi_processrepoargs: publish fetch_if_needed

Make it possible to re-use abdi_processrepoargs.fetch_if_needed() by
making it public.

Test Plan:
$ ./precommit.sh
Arcyd: add fetch command

Make it possible to 'pre-fetch' repos in arcyd before cutting over by
adding a new 'arcyd fetch' command.

In further work we could add a read-only mode to 'arcyd start' for
keeping instances constantly in sync.

Test Plan:
Add 'arcyd fetch' to some tests
$ ./precommit.sh
$ ./testbed/arcyd/acceptance_tests.sh

Manually verify that fetch fetches special branches with
$ ./testbed/arcyd/test_shell.sh
Merge branch 'feature/arcyd_instance_cutover3' into feature/arcyd_instance_cutover2