Move RootColor from Eval to Search

No functional change.
Use self-describing constants instead of numbers

And remove now useless comments.

No functional change.
Change NO_PIECE value and shrink PieceValue[]

This requires changing color_of() definition.

No functional change.
Don't need to init board[] with NO_PIECE

Now that NO_PIECE == 0 the common memset() will
do the work.

No functional change.
Don't copy a full Position object in print()

Function move_to_san() requires the Position to be
passed by referenced because a do/undo move is done
inside the function to detect a possible mate and to
add to the san string the corresponding '#' suffix.

Instead of passing a copy of current position pass
directly the original position object after const
casting it. This has the advantage to avoid a costly
Position copy, on the down side a bench test could
report different searched nodes if print(move) is
used, due to the additionals do_move() calls.

No functional change.
Retire refine_eval()

Inline its content and better comment what it does through
some renaming.

No functional change.
Shuffle aspiration window loop

No functional change.
Wrap in a class Skill Level code

Note that the actual pickup is done in the class
d'tor so to be sure it is always triggered, even
in case of a sudden exit due to a 'stop' signal.

No functional change.
Drop Chess960 and UCIMultiPV globals and rename MultiPV

No functional change.
Rename RootPosition and shuffle think()

Just slightly code reshuffles, noting interesting here...

No functional change.
Fix an assert when we stop the search

When signal 'stop' is raised we return bestValue
that could be still set at -VALUE_INFINITE and
this triggers an assert. Fix it by returning
a value we know for sure is not +-VALUE_INFINITE.

Reported by 平岡拓也 Hiraoka.

No functional change.
Allow full repetition detection

Based on sshivaji 6ee19aa5389ce60181907ba53bbb50642f2d5657 commit
Enable true 3 fold detection in search
Full three fold repetition detection only at root node
Merge pull request #34 from jromang/repetition

Improve 3 fold repetition detection
Extend full 3 fold detection to PvNodes

And restore old behaviour of not returning from a RootNode
without updating RootMoves[].

Also renamed is_draw() template parameters to reflect a
'positive' logic (Check instead of Skip) that is easier
to follow.

New bench: 5312693
Fix asserts due to TT access races

In multi-threads runs with debug on we experience some
asserts due to the fact that TT access is intrinsecally
racy and its contents cannot be always trusted so must
be validated before to be used and this is what the
patch does.

No functional case.
Fix broken uci notation for promotions

Silly typo (introduced in e304db9d1ecf6a23) completely
messed up move notation in case of promotions causing
"Illegal move" warning in cutechess-cli.

Reported by Jörg Oster.

No functional change.
Use std::stack instead of fixed size array

Only in not performance critical code like pretty_pv(),
otherwise continue to use the good old C-style arrays
like in extract/insert PV where I have done some code
refactoring anyhow.

No functional change.
Reformat check_is_dangerous()

And shuffle some code at search.cpp tail.

No functional change.