Switch blocks to a constant-space Merkle root/branch algorithm.
This switches the Merkle tree logic for blocks to one that runs in constant (small) space.
The old code is moved to tests, and a new test is added that for various combinations of
block sizes, transaction positions to compute a branch for, and mutations:
- Verifies that the old code and new code agree for the Merkle root.
- Verifies that the old code and new code agree for the Merkle branch.
- Verifies that the computed Merkle branch is valid.
- Verifies that mutations don't change the Merkle root.
- Verifies that mutations are correctly detected.