The n_steps argument here seems a little weird. Shouldn't the InferenceProcedure have the runtime encoded in itself somehow? What if we made InferenceProcedures based on scan that run to convergence rather than for a fixed number of steps? I also don't like tying the number of mean field steps to the number of Gibbs steps. A lot of the time the number of Gibbs steps will need to be much higher than the number of mean field steps.