[avalanche] Extract a template class from BlockUpdate
Summary:
So we can reuse it for conflicting proofs as well. Note that this removes the space optimization (using the 2 LSB from the pointer to store the status) because conflicting proofs will use a std::shared_ptr<Proof> which can't be cast to uintptr_t.
There is no change in behavior.
Ref T1854.
Depends on D10249.
Test Plan:
ninja all check-all
Reviewers: #bitcoin_abc, PiRK
Reviewed By: #bitcoin_abc, PiRK
Maniphest Tasks: T1854
Differential Revision: https://reviews.bitcoinabc.org/D10250