Allow replacement of nodes on a tree

This commit adds and tests two new Tree::TreeNode methods to allow
in-place swapping out of nodes.

- `parent#replace!(old_child, new_child)`
- `node#replace_with(new_node)`