Extrapolation when gridding data and better interpolators

A problem we had with grid interpolation was that the `matplotlib.mlab.griddata` function that was used didn't extrapolate the data outside of the convex hull of the data points. This is good because extrapolated data is usually meaningless and misleading. But this is bad because it looks bad on plots and sometimes you want extrapolated data. 

Also, the nearest neighbors algorithm used by `matplotlib.mlab.griddata` is not very good. A better option is `scipy.interpolate.griddata` which has a cubic interpolation.

So I've added support for scipy `griddata` by default. You can still use the nearest neighbors of matplotlib by setting `algorithm='nn'`.

There is also an `extrapolate` option (True by default) that extrapolates the data using the `nearest` method of scipy `griddata` (takes the value of the closest data point).

![interpolation](https://f.cloud.github.com/assets/290082/956324/4b4f927c-043b-11e3-8066-bd2d003b1cb9.png)

**Update**: Added 2 new functions, `interp_at` to interpolate on given points (e.g., for extracting profiles) and `extrapolate_nans` to replace NaNs or masked values using the nearest data value.

![profile](https://f.cloud.github.com/assets/290082/956777/fbf2847e-0443-11e3-973c-c0ad9398e99e.png)