Boxes sliding on top of each other is not so much what warmstarting is for. At least... unless I've grossly misunderstood its purpose.
Warmstarting is for having the simulation converge more quickly, which allows for better accuracy with the same number of iterations (or fewer iterations with the same accurracy, saving CPU), What you do is, you remember the resulting impulses from the last frame and feed them in at the beginning of the next frame's simulation. The assumption here is that there is a kind of coherence between two frames, that is, an object that is moving this millisecond will probably still move in the same direction the next millisecond, so this is a good starting point. For real objects that aren't sub-atomar particles, that assumption is indeed true most of the time (unless they bump into something).
To avoid stacked boxes sliding (or, in general, to avoid inactive objects drifting/moving), you stop simulating objects which have impulses below some threshold.
http://box2d.org/downloads/
Awesome collection!