Reimplement max bounds enforcement with proper zooming and lookahead

Based on #1946 by @kapouer. This changes the max bounds behavior so that minZoom is not enforced, and instead the view stays anchored to the bounds when zooming in/out. Should fix a hell lot of max bounds issues, including #1908, #2081, #2168.