Halton Sampler
My implementation of the Halton Sampler closely follows the relevant section in the PBRT book. To understand the idea behind Halton sampling, I also had a look at the source code of the Mitsuba renderer, although I did not take any code from there. I just used it to get a different perspective on the ideas presented in the PBRT book. This dashboard by Jacob Rus provides an interactive introduction to the Halton sequence, which gave me a better sense of what the Halton sampler is actually doing.
As can be seen from the picture below, my implementation actually produces less noise than the independent sampler, but has some aliasing issues. If my understanding is correct, this is because I do not scramble the values returned by the Halton sampler. I chose not to do that for time reasons and because the Halton sampler would have been of limited use to me anyway, since I had already implemented the denoiser.
The Halton sampler was therefore not used for my final render.

The image on the left uses the independent sampler, the image on the right the Halton sampler. But where rendered with 64 samples.