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.
Yeah, e.g. in case there's a map with maxZoom = z20, fitBoundsZoom will always return 18 max. I think we should only limit it if it's infinite.