assert after undo
fix a tricky bug (6578261)
b5ce7d1e88bde2dec3d45e0143514b9034a468e2 and fa07e4c43e21ac3ab1eda5b6c4539355235761df should have had the same signature, but they don't.

After a long and painful investigation, it turns out that the culprit is that:
pv = read_pv(B, depth);

has a vicious side effect. Indeed read_pv() contains a block like:

B.set_unwind();
... play some moves
B.unwind();

Such a block restores everything in the board into place, except that it modifies sp0. And because of that, doing

B.play(best);
pv = read_pv(...);
B.undo();

at the root node, actually increments by one sp0, which changes the behaviour of B.is_draw(), due to the 2/3-fold repetition stuff.

Conclusion:
- use an undo loop in read_pv()
- retie completely these dangerous set_unwind() and unwind() functions. They were introduced to abort the search brutally with a C++ exception (like a C-style longjump()), and restore the board state. This is useless and was removed, as UCI protocol doesn't require it. position should always preceed go command, so no need that the board state is restored after an aborted search.

Back to the correct:
signature = 6578261