Algebraic methods in computational complexity: arithmetic circuits, communication complexity, and interactive proof systems