Smooth and efficient zooming and panning.

Based on the interpolate-zoom plugin. Required adding a zoom.size method to
specify the viewport size of the zoomable area.