The tree-walk code written for cursors, __wt_tree_np(), should replace the existing tree-walk functions – it's simpler.
One open question: how does eviction avoid evicting the last page returned to it, that is, the one that anchors the eviction thread's position in the tree? The same problem will apply to using __wt_tree_np(), we need to move 1 past the last page we're considering for eviction, because a page anchors our place in the tree.