Store `cache` in per-registry config files

Move the code setting npm `cache` option from `sl-registry use` to
`sl-registry add`. This way the ini file contain all configuration
options and can passed as --userconfig to npm.

Side effect: the "default" configuration uses the default npm cache
directory ($HOME/.npm) now, unless configured otherwise in user config
($HOME/.npmrc).
test: refactor helper functions to helpers/sandbox

Modify helpers/sandbox to include all lib/storage functions
(e.g. `writeIniFile`, `load`, `getCachePathForName`).

Move test-specific methods from test/cli.test to test/sandbox:
 - givenAdditionalEntry
 - getUserNpmRc
 - givenUserNpmRc
 - readUserNpmRrc

Refactor initialization of storage & default config, move it from
test/cli.test to test/sandbox. Modify the initialization to call
`storage.init` and `RegistryConfig.createDefault` directly instead
of running the cli. This cuts down the time to run tests to half.
test: split cli suite into smaller files

Create one test file per the command tested:
 - test/cli-add.test
 - test/cli-remove.test
 - test/cli-remove.test
 - test/cli-use.test

Move `itOnUnix` to helpers/it-on-unix to allow reuse.
Extract spawnNpmLogin into standalone file.
Extract RegistryConfig hasAuthCredentials

Move the code determining whether the registry config has auth
credentials and whether it requires `npm login` to a standalone file
to allow reuse.
refactor: storage.loadOrExit
fixup! remove extra line from cli-use.test
Implement `promote` command

The command downloads the given package version from one registry
and publishes it to another registry.

Usage:
  sl-registry promote --from <name> --to <name> <package>@<version>

Related change(s):
 - extend spawn-npm-login to support --userconfig option
 - move quoteArg to a standalone file