Although not necessary for our current purposes, if the code is to be used more generally in QIIME: if all children of a node have to have a different names (I think they do, right?), we might want to keep another element in each node (in addition to name, popcount, and children) that is a set (e.g., children_set) so that the name lookup (line 21) is O(1). As long as things are only being added and not removed, the synchronization of children and children_set would not be a worry. For very large trees, the time spent here could add up. Thoughts?