Significant change to the gridder api

- Broke out the bounds into their own parameters
- Added a return value of the bounds that were used on the gridder
The way that the gridder works the binning is done under the rules `lo <= val < hi`, thus if you set upper edge of the last bin to be equal to the the maximum then the points with the maximum values will be thrown out.

The function `np.spacing` (which google is failing me to find the docs of) gives the distance to the nearest adjacent number.  From the docstring:

```
Notes
-----
It can be considered as a generalization of EPS:
``spacing(np.float64(1)) == np.finfo(np.float64).eps``, and there
should not be any representable number between ``x + spacing(x)`` and
x for any finite x.

Spacing of +- inf and NaN is NaN.
```

We should add
```
qmax += np.spacing(qmax)
```
which will pad the upper edge by _just_ enough to ensure that all of the points are in-bounds with the default behavior.