This commit adds a bunch of getters/setters for accessing the
boardGrid. This is a simpler way to allow both Piece and all
the inherited classes to access the Board without having to
declare every single class a friend. So now when we want to
access boardGrid, we use getPieceAt() or setPieceAt(). They
are overloaded to accept rank/file, Square, or int/int.
There's also a convenience function to check if the square
is empty, though that may get re-written to use the existing
Square.isValid().