Make sure every access to g_avalanche is preceded in the same scope either by an assertion that the avalanche processor is really initialized or by an early exit of the scope.
In `ProcessMessage`, we return early at the beginning of the function if `IsAvalancheMessageType(msg_type) && !g_avalanche`, but this is a weak guarantee as the IsAvalancheMessageType function could be buggy or not up to date, so I added more assertions close to where the avalanche messages are processed (if they need g_avalanche to be initialized).
In `ProcessGetData`, if the request is for a proof, we didn't actually guard against `g_avalanche` being a nullptr. Luckily when running `bitcoind` and when the node starts processing inbound messages, the processor is always already initialized. Add a `continue` in that loop to skip the processing if `g_avalanche` is nullptr anyway.
Depends on D16250