Improvements to Surface

Cleaned up the implementation similar to the previous commit (90f048b50c5e885a77ea493d9143893c3eda13b3).
Clarified the index evaluation a bit.
Added a new structure MoveList

This is a collection of moves that efficiently stores moves
generated by the board.
Cleanup Board

Starting work no retrofitting the Board structure with the current implementation API.