Implement game fundamentals like piece movement and winning.

In particular, implemented the following user stories:

 - As a player, I am unable to move a piece more than one square 
   at a time.
 - As a player, I can take opponents pieces as per the rules of 
   the game.
 - As a player, I know when the game is over and someone has won.
 
This also required introduction of the piece type classes. I chose
this to get started as an alternative to having a piece configuration
mechanism to fit with the type of project this is. 

Also, the win and game reset logic caused many more problems in thread
synchronization between the UI thread and rendering thread. To get 
around this for now and in the future we introduce a queue for update
actions to take in the draw loop that is populated from the UI thread.