We already had a recursion guard: `return object if object.frozen?`

If objects themselves are frozen before the objects they contain, the early return above is sufficient to prevent infinite recursion.

I profiled `deep_freeze` again and the fact that the recursion guard was still taking up almost half the running time made me look at this again... It's so simple it just might work