First-Order Methods in Convex Optimization: Acceleration, Conditioning, and Rescaling