Add fractional zoom support to fitBounds and getBoundsZoom

Adds a 'step' option to fitBounds (and equivalent 'step' parameter to getBoundsZoom), defaulting to 1, enabling these functions to use fractional zoom levels (#2382). For example, set 'step' to 0.25 for nearest quarter zoom level, i.e. 10, 10.25, 10.5, 10.75, and so on.

Optimizes getBoundsZoom with a binary search; previous implementation counted up from minZoom using whole numbers.
Need a non-infinite maxZoom in order to find a midpoint. Is there a better number to use? Or is the issue the use of a magic number?