Corrected problem with "owner of" condition
Fixed a bug that could cause certain pieces to not have their moves resolved, and others to be resolved multiple times
Added basic minimax AI, with trivial evaluation function
You can now only select moves for local players through the interface
Using setTimeout to allow the UI thread to update before starting AI calculations
Stopped piece move caching from interfering with the AI (& logging), although its a bit blunt at present (telling AI to get cached moves on first step instead of determining for itself)

If negamax AI finds multiple moves with equal scores, it returns one of these randomly, instead of just the first one.
Added alpha-beta pruning to negamax AI
AI now checks for end-of-game conditions
Added several difficulty levels using alphabeta, and AI vs AI game mode
Changed how AIs are loaded, so that they're not limited to just 1 or 2
Fixed bug with AI handling of game-end
Changed game.players from an object to an array
Let alpha-beta pruning account for piece values, but somehow this makes it play terribly. It resolves much faster.

Suspect this shows up a bug in the alpha-beta pruning.
Tidied up alpha-beta pruning evaluation function, and piece values are now (correctly) numeric
Removed arbitrary attack
Added moveNumber and maxDist conditions
Added turnsSinceLastMove condition

Also removed firstPieceNumber field from piece
Added threatened condition, though it doesn't currently work
game move number and piece last moved turn are now handled within the move perform and reverse methods
Implemented threatened condition