Added Within function.

Within is useful for finding the bin of a datapoint, for example when making a histogram or otherwise trying to find similar points. This commit adds the function and tests.
It seems to me that returning -1 as an index for v that is not found is more useful than panicking. If the result is used and the bin has not been found, the panic would occur anyway (this is how similar functions behave in the standard library). I would also see `s[i] <= v` when `i == len(s)` as being a valid (if not particularly useful) result. I don't think we should be using panic to say what is sensible, but rather what is possible.

This leaves a significanly reduced set of cases that panic:

* `len(s) == 0`
* `s` is not sorted

In all other cases listed above, the result is -1. (These would naturally occur, but can be optimised as returns in the conditions below).

I would also suggest that some benchmarking be done to see if `sort.Search` helps (or hand crafted binary search) for some values of `len(s)`. If it does, then there should be a `len(s)`-based condition to decide whether to use range or `sort.Search`.

@jonlawlor Nothing wrong with `panic("unreachable")` in general, but here it would go away if the above comments are acted on.