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)`

I'm happy to make any changes you need to hopefully get this merged. I took a swing at documenting the methods but it may not be up to par with what you prefer, 

Thanks for the great library!