Introduce draggable that supports nested scrolls and overscroll effects

This CL introduces NestedDraggable, a version of Modifier.draggable that
handles nested scrolling and overscroll effects, and that has an
explicit Controller API to drive and stop a given drag gesture. This is
meant to be used to replace MultiPointerDraggable and drive the STL
transitions.

This CL contains tests that focus on testing very specific cases where a
draggable is updated or removed from composition, or when a nested
scrollable is removed during composition, ensuring that onDragStopped is
always called when a drag is started. This is very important with STL,
for which any swipe transition should always be stopped.

Bug: 378470603
Test: atest NestedDraggableTest
Flag: EXEMPT new API not used anywhere yet
Change-Id: Ic2e594b1640e77a7412063c58a9b5822699ba452
3 files changed