Added Read functionality too, because why not?
Refactoring to finally elimiate that horrible "zone {wrappedTree = wrappedTree zone}" pattern.

Record fields are awkward enough to use in general, but that particular form of field substitution syntax always confuses me.