Add concept of Square that contains rank and file
Add moves of a bishop

This is not currently hooked up to anything, but add the end moves that can be
made with a given board and a given start square. It doesn't take into account
other pieces yet, just the edges of the board.

Adds new methods for creating a square, getting other squares by offset and
comparing two squares for equality.

I think I may be spreading the logic around the board dimensions around too
much (it's possible to construct an invalid square), but I think that's fine for now.
Stops once it captures a piece
Add all the pieces, and make the board use them internally

This will be required to decide if a piece is an enemy or a friend
Stop before friendly pieces
Rook moves

Contains duplication to factor out
Remove duplication around repeating offsets
Queen moves