Patch functionality, improved node_slope

Significant additions to raster.py:
1. rmg.node_patches(). This returns the ids of the (up to 4) patches
which surround each node.
2. rmg.patch_nodes. This returns the ids of the 4 nodes which surround
each patch.
3. rmg.number_of_patches. Simple property.
4. rmg.node_slopes_using_patches. This is a fully vectorized, really
quite impressively fast method to calculate an average slope (and
average gradient - it also returns vector components). It looks fiddly,
but this is essentially just a very clean generalisation of the methods
laid out in Horn 81, and adopted in ARC. I’ve coded it in raster, but I
don’t think there’s any reason why it couldn’t be ported up to base.py
once we have the general patch query methods in place for irregular
grids too.