Tree: Fix inconsistencies when inserting nodes already in the tree

This fixes two issues when inserting a node that already exists in the tree:

- Previously, the node was removed from its original parent silently before being reparented. Now we fire a `remove` event with {src: 'add'}.

- Inserting a node into the same parent with a new index could result in an off-by-one error. Now the desired insert position is maintained.