Allow a node to be renamed

This PR will allow you to `#rename` a node in place. I took a shot at setting up the documentation but it probably needs to be cleaned up. Feel free to let me know if you would like any changes made so that you are happy merging it.

Do note that I made the name attribute read/write as opposed to read. I had to make it writable and add the rename method because updating a node's name also involves updating information on the parent node if it has one. So I added the `rename_child` method on the parent that will update it's children hash as well as call `#name` on the child. By separating out the setting of the instance variable and the logic of communicating with the parent, we avoid a stack overflow as a parent updates the name of the child node which then tries to update the children_hash key on the parent, and so on and so on.

Thanks!