Stop using ImmutableArray2D

Stop using ImmutableArray2D and make Board a proper immutable type.  Get
rid of some code duplication in tests.

ImmutableArray2D still needs to be deleted; may need to copy some of its
tests.
Don't allow moves to unreachable squares

Don't allow moves to unreachable squares