abdi_repo: extract 'fetch_special_refs'

Make it possible for us to re-use the fetch special refs code later by
extracting it to a new function.

Test Plan:
$ ./precommit.sh
arcyd/test_shell: create two arcyd instances

Make it easier to test migrating from one arcyd instance to another by
creating a second, inactive, arcyd instance in the test shell.

Test Plan:
$ ./testbed/arcyd/test_shell.sh
Add new 'arcyd fetch-special' command

This is useful for switching from one arcyd instance to another,
as arcyd never normally reads the special refs, it only writes them.

Admins will first need to stop the existing arcyd instance, then
'fetch-special' and finally start the other arcyd instance.

Test Plan:
$ ./precommit.sh
$ ./testbed/arcyd/acceptance_tests.sh
$ ./testbed/arcyd/test_shell.sh
    cd ..
    (cd dev; ./poke.sh)
    (cd dev; ./accept.sh)
    (cd arcyd2/var/repo/localhost_fs_origin; git show-ref)
    .. no landing branch ..
    (cd arcyd2; arcyd fetch-special --all)
    (cd arcyd2/var/repo/localhost_fs_origin; git show-ref)
    .. has landing branch ..
    (cd dev; ./poke.sh)
    (cd dev; ./accept.sh)
    (cd arcyd2; arcyd fetch-special --all)
    (cd arcyd2/var/repo/localhost_fs_origin; git show-ref)
    .. landing branch is updated ..