This simplifies weather fetching so that multiple fetches are queued up instead
of hitting Merino at the same time. The newest fetch will cause earlier fetches
to stop (when possible). This is similar to how `SuggestBackendRust` handles
ingest.
This also improves `add_tasks_with_rust()` in a couple ways: (1) It adds
`skip_if_rust_enabled` and (2) handles task function args better by cloning them
instead of reusing them in the `_rustEnabled` and `_rustDisabled` tasks.
Currently we're relying on the normal xpcshell `skip_if` predicate to skip
`_rustEnabled` tasks when Rust is enabled while still running their
`_rustDisabled` counterparts when Rust is disabled. Except it doesn't work at
all because the `skip_if` predicate is evaluated at the time `add_task()` is
called, not when its task runs. That means the `_rustDisabled` versions of these
tasks are never run, since Rust is now enabled by default. So we're missing test
coverage in these cases. It's not a huge problem since hopefully we will not go
back to enabling the JS backend by default, but until we remove the JS backend,
we should maintain test coverage. (The `setupAndTeardown()` task in
`test_quicksuggest.js` failed when I fixed this, so that's once case where we
had a failing task and didn't know about it.)
Depends on D204138
Differential Revision: https://phabricator.services.mozilla.com/D204325