test stop walk children when false is returned
roots and leaves, this.isLeaf and this.isRoot are things
don't get the keys twice
don't call hasOwnProperty for every node
ability to replace a value and array tests