Major restructuring to a more object oriented approach

This approach was chosen because a lot of functions need to be invoked
on the board and there are several different boards when doing move
validation and later on probably also in the alpha-beta search. Because
of these things, it makes sense to create a Board class.