I've been reading through the bitcoin source code. I'm interested in working with anyone who tries to implement this. Here's what I've found:
All the relevant code seems to be in main.cpp and main.h.
As currently implemented, we can traverse the blocktree from leaves->root, but Aviv and Yonatan's algorithm requires us to be able to traverse the blocktree from root->leaves. The first thing that needs to be done is that we need to rewrite the tree to make it traversable in both directions.
After this, the code to determine which block is the "BestBlock" to append a new child block to needs to be pretty much completely rewritten. The code currently computes the ChainWork (the amount of work needed to compute the current block and all blocks above the current block on the tree) of each block in the tree. It then searches through the entirety of (the still valid parts of) the tree for the block that has the largest ChainWork, and it assigns this block as the BestBlock. Instead, we need to traverse the tree from root->leaves, and compare the work in each subtree whenever we come to a fork.
Also, the code to invalidate and discard blocks on the tree needs to be rewritten. I'm lost on how this works and how it should be rewritten.