tentative updates to better handle DnD operations
useTreeData didnt update the tracked TreeNode.value since it doesnt know the structure of the data the user provided to it. This means calling the useTreeData util methods like insert and stuff was troublesome because the TreeNode.values returned were always reflecting just the inital values and thus the user would need to look at the TreeNode.children and reconstruct the values to match the data structure that TreeNode.value is in. The changes in the commit allow the user to define functions that tell useTreeData how to update TreeNode.value