I'm gonna throw a curve ball here. :) I think the "housekeeping" or "reference gene" concept is fundamentally flawed, because it rests on circular logic. In order to verify that a "housekeeping" gene X is constant across your samples, you must assume that the $C_t$ values themselves are actually a valid measure, so that you can assess the expression level of X directly. But if $C_t$ values are assumed valid, then you don't need a housekeeping gene in the first place! This procedure assumes what it intends to prove; therefore it is circular.
The normalization problem is just not solvable without additional assumptions. A spike-in control works if you are worried about technical variation, but it does not address biological variation. A reasonable assumption I think is that the total mRNA pool is constant; this underlies most normalization methods used in microarray or RNA-seq analysis. For RT-PCR, this assumption can be tested using cDNA dyes, as in this paper. (cDNA is advantagous rather than isolated RNA, because the reverse transcription step is notoriously noisy and should be controlled for.)
In my mind, housekeeping genes are only useful it you really know in advance that they must be constant, and do not need to check this assumption; then the logic is not circular. In this case, if you observe changing $C_t$ values for the housekeeping gene, then you must conclude that the experiment went wrong somehow, and the data should be discarded. But I think this is rarely the case in practise.
This is not the most common opinion on this often-debated matter, but I think it is the right one. :)