Wrote stalemate code

There is now stalemate detection. It hasn't been tested and nothing has been written on the frontend to reflect it.
Wrote evaluator. Fixed some code smells.

Wrote an inital evaluator which only evaluates the value of the pieces still on the board. Ran code analysis and fixed some smells.
Fix up minor issues with checkmate.

The checkmate binding broke when I fixed the code smells. This is now fixed.
Moved checkmate and stalemate code to Chessboard

The checkmate and stalemate code has been moved to Chessboard. I feel that this makes more sense and also makes writing the evaluator easier.
It lives!

Wrote an engine. Currently it only works when the MAX_PLY is an odd number. I know why this is happening. The game plays against me though.

Also, one problem is that when more than one move results in the same evaluation then a random one of the moves should be chosen. Not the first.

Holy shit, I'm a little overwhelmed right now.

Even with an odd ply I know that this won't perform well with endgame because I have coded up stale or checkmate into the evaluator or engine.