Basic mark and sweep (a bit dodgy)

This works, but it's got some mutable state that's sort of swept under the "protected" rug.  I'm particularly amused by the fact that of the two protected methods, the one with the more dangerous-sounding name (#void_warranty_on) is actually side-effect free.

Also, the Level already knows about its Cells; having the Cells depend on the Level seems unnecessarily circular, especially in service of such a blatant SRP violation.