put tab movement in separate file

this is the cleaned up version
add a utility function to push the cursor for a node
use node cursor push util
use the TabMover to move tabs

This now supports add, removing, and changing the movable flag while a
tab is being dragged.