Only compute isCheck as needed.
Removed Piece type replacing with sets of squares.
Store pieces for each side separately.
Sped up isCheck by avoiding new set creation.
Avoid recomputing board value each time it is needed.
Resolved a bug checking for pawns giving check.
 Moved board evaluation out of the script. Using moves to speed up evaluation by looking at the delta rather than recomputing the board value every time.
Refactored Pieces.
Changed lazy vals to defs.
Fixed bug in delta evaluation of castling. Using delta evaluation for speedup.
Pulled more into the side's logic.
Pulled out constants to avoid needless allocation.
Cleaned up castle and pawn move logic.
Restored en passant capture.
Restored 50-move rule.
Restored three-fold repetition.
Updated readme for changes made.