Move ordering fixed, Killer heuristic implemented, Iterative Deepening fixed, refactoring
-Refactored AI.ChooseMove so that it calls alphaBeta and alphaBeta keeps track of the best move so far, so that ChooseMove doesn't have to clone most of the alphaBeta method for the first ply. Also realized that the ID loop up to Constants.getDepth() -1 was there for a reason, since Choose Move used to check the first ply.  This helps, since I though the search was going one ply less deep than it was. TL;DR: Performance is good after all
-Fixed a bug where castling wasn't getting undone when it was simulated. Added named constants for all columns while I was at it, so there aren't as many raw ints floating around.
-Tweaked move ordering and PV/MVV-LVA weights so that it matches the chessprogramming wiki, and performance did improve accordingly.
-Added a menu item so users can choose a depth from [1,5].  Game still crashes when using a depth of 6, so I'll probably need a transposition table to go any deeper.

Engine is pretty stable now, and ply 4 searching is almost instant. Need to double check that all algorithms are helping (disable them, check nodes visited, enable and run again to see that they make a positive difference) and then I'll move forward.  It does look clear that horizon effect is detrimental to performance, especially on lower ply searches, so avoiding that is the next priority.