I'm torn on this given the expense, but agree about the concern of altering self. An alternative would be to do everything in a separate `dict` that is keyed by node ID (see [assign_ids](https://github.com/biocore/scikit-bio/blob/master/skbio/core/tree.py#L2485)) and on the main traversal over the tree that caches the info, just do a lookup. Make sense?