Board.make to use a xiao-encoded string instead of a Move object

An engine will receive a xiao-encoded string representing a move
from a UI. Considering this, the method Board.make does not need
to expose the structure Move to the engine. All of the move parsing
and usage can be handled internally by Board. This simplifies the
public API for Board.

Here is the proposed usage after this commit.

    // make
    if(b.make("move", snapshot)
        use the parsed move in snapshot.move here

    //undo
    b.undo(snapshot);

snapshot has the type Tuple!(BoardStatus, "status, "Move", "move)
Formatting

Repositioned the content in board.d to show more clearly what
non-public code relates to its corresponding public code.
Added missing test code back in
Created a file for universally used code

For lack of a better term, changed Index to nni (non-negative integer)
as the name index only fits a small piece of its intended usage.
nni is basically what I would like size_t to be - a non-negative
integral value that fits the word size on the processor.