Initial commit

Pieces have light or dark team state, Board can populate itself with
light and dark pieces on the correct squares, given its current size.
Adds to_s to Board class
Lets Piece class report possible moves
Adds deep duplication method to Board.

Public [i,j] and private [i,j]= methods added, and incorporated
into Board's print method (previously, to_s).
Fixes wrong directions in move constants
Adds methods for moving and validating moves

get_valid_moves returns all moves for a given piece (currently only
applies to sliding moves). perform_slide calls it, and raises
exceptions if the attempted move is invalid.

Also changes the protected []= method to accept two arguments instead
of three (the first is an array of 2 values), and changes the public
[] method to accept either an array of 2 values, or 2 values themselves.
Initialize with default options
Changes Piece to .dup returned arrays

... so we don't have to remember to do it elsewhere.
Also to_s returns placeholder chess unicode chars.
Adds jumping methods to Board

Also breaks jumping and sliding into sub methods, where their code
is similar enough to share.

Colorizes board output.
Moves board manipulation to Piece class

perform_slide and perform_jump (and their related helpers) now reside
in the Piece class. A Board method where_is returns the board location
of a specific piece (a Piece always asks where it is). Until a safer
Board method for manipulating the board is made, []= is public again.
Adds sequences of multiple moves, and their validation

Requires that Pieces be duplicated when a board is deep duplicated,
and a dup method was added (to specify a different board for the
duplicated piece to be assigned).

Options for board size and rules are passed as an options hash
through either the Checkers.new or Board.new methods.
Changes valid_move_seq? to return false if false