Decided to push, although not quite done yet. The bugs are fixed now and it's really fast. But the special moves don't work for the computer yet, having a hard time figuring out how to do it.

I changed it so it no longer works with states, I pretty much removed all cloning
        from the program except once. Cloning is what was slowing things down so much.
        Also added StatePieces, state.getWhite or getBlack pieces .getAll returns all the white/black pieces.
        This allows us to use a simple for each loop instead of a nested loop.
        Instead of states what happens is I move the piece, evaluate the state. Then move it back. But of course all parameters need to be put back to how they were before. Thus there is roughly 5 lines that move the piece. This happens in ComputerPlayer and canMove does the same as well.

        Computer player is running on 1 ply with the grahamBestMove method. Since you did the tree stuff I'll let you change that to work with this new way of doing things. But it's a lot faster, try it out!