This is clean implementation of drag and drop content and media nodes using client side JS.

Added jquery.mjs.nestedSortable.js (https://github.com/pynej/nestedSortable/blob/master/jquery.mjs.nestedSortable.js)
Added a backend /umbraco/WebServices/DraggableController for the client side draggable tree to interact with Umbraco and validate and move nodes.
Updated the UmbracoTree.js to append drag and drop logic to content and media trees after they are rendered.
Added Ajax calls to validate that a node is allowed at a place it was dragged to(or it is returned to the original place) and code to move the node/reorder it when it is moved.
Added success/error messages to the english xml file.
Added a cache to track node allowed status as nodes are moved around.  This is to reduce the number of ajax queries when nodes are moved around.  This cache is cleared each time the media or content section is navigated to to ensure that document type changes are properly reflected on the client.

Note: To move items into an empty or closed folder you have to drag the item to the folder or item and then drag to the right.   This will tell the system to move the item under destination as a child as opposed to before or after it as a sibling.
Also moving two and from the trash also works.