Another piece of logic that is needed in headersfirst: a fast way to determine whether a tip of the header chain is an descendant of what a particular peer has available.
A skip list is easy to add to the existing structure, and allows fast (O(log n)) access to far predecessor blocks.
The current code only uses it to speed up CChain::FindFork and CChain::GetLocator.