How to approximate a moving RMS without iterating over N samples for each required output?
There is a way to do it, it is really similar to a moving average

$N$ : number of samples per period

$Z$ : Accumulator

$x[n]$ : current sample

$$Z[n] = Z[n-1]+ x[n]^2 - x[n-N]^2 $$ 

$$x_{RMS}[n] = \sqrt{\frac{1}{N}Z[n]}$$

Basically, you need a delay line to store the previous $x[n]$ samples or better yet the previous $x[n]^2$ samples and you need an accumulator. Both the accumulator and delay line should be set to 0 prior to starting the moving-RMS.

Basically you need need 1 multiplication, 2 additions, 1 division (by a constant, so it is equivalent to multiply by another constant) and 1 square root operation per sample.

Edit : The number of samples per period should be an integer.  There are ways to do it with a non-integer number of samples per period, but it takes more work.

Edit 2 : This scheme will work only if the accumulator is an integer and if the accumulator never wraps around as Robert Bristow-Johnson pointed out. If the accumulator is floating-point, you might be stuck with some value in the accumulator you cannot get rid of, because floating-point arithmetic is not guaranteed to be associative in all conditions. See R-B-J solution in the comments when using floating-point arithmetic.