Runge-Kutta methods in modern computation, part I: fundamental concepts