synthesizer: vary the flow of time for frequency

The traditional algorithm that forms the main part of the
synthesis loop uses:

	f(frequency * time)

to calculate the value of the next sample. For example, a sine
tone is:

	f(x) = sin(2 * pi * x)

When varying the frequency over time, e.g.:

	frequency = 100 * (1 + (sample / 4410))

(which increments the frequency by 100 every 10th of a second at a
sample rate of 44100Hz), the sine wave jumps at each frequency
change which can cause sound artefacts.

The approach to fix this is given by Nathanael Nunes in his YouTube
video "Software Synthesizer Algorithm Analysis With Excel Part 5"
(15 Dec 2012):

Instead of having the traditional synthesizer loop:

	float t = 0.0;
	while (true)
	{
		float a = f(frequency * t);
		t += 1.0 / sample_rate;
	}

you vary the flow of time instead:

	float t = 0.0;
	while (true)
	{
		float a = f(t);
		t += (1.0 / sample_rate) * frequency;
	}

I do not understand the mathematics/physics behind this, nor do I
have any other literature references describing this technique.
However, it demonstratably works better than the traditional loop
in practice, so is used here.