Allow float comparisons, allow ranges

I understand this code has been written to be a straight port of another Java version.  These changes break this, so I can certainly appreciate if this is not accepted on account of this.  Nonetheless, I think the added functionality is still quite useful as well as backwards compatible, so I've initiated the pull request.

This produces two improvements:
1.  Allows comparator functions to return float values.
2.  Accepts low, high range limitation for those calling the binary search multiple times.  

I'd be happy to break up the pull request if e.g. only one piece is of interest.