Optimizing syncing of sparse branches on stalled chain
For situation such as current goerli, there are 2-3 long competing branches spanning hundreds of epochs, but with only very few blocks on each of them.

When sync manager discovers a new head of such a long branch, block verifier returns `MissingParent`. Sync manager then rewinds to an earlier epoch to attempt to obtain the parent. If it repeatedly fails to obtain the same block, the rewinds grow larger until it eventually finds it.

While this works well for a few epochs of being behind, it doesn't work well for larger gaps, as is happening on goerli on all of the branches. To better support discovery of such branches, we could ask the peer that gave us the new head (with `MissingParent`) to also give us the parent directly (with `beaconBlocksByRoot`) -- `request_manager` is suspended while sync manager is running, so it cannot help us with this task!

If the peer that gave us the head also gives us the parent (which it should), then we can provide that as a hint for the next rewind point and resume syncing by range once more.