
Added an optional duration: to Scrollable.scrollTo(newOffset, duration: d) which animates the scroll to newOffset. Refactored the Scrollable implementation a little to make the roles of the "toEnd" and "toOffset" animations clearer. _handlePointerDown() now stops both animations. Similarly, we only call settleScrollOffset() from the cancel gesture handlers if the animations aren't already running.