Region Adjacency Graph

## Example Images
![figure_1](https://cloud.githubusercontent.com/assets/3823490/3291718/5ce9b952-f587-11e3-8c29-e2aace6d7794.png)
![figure_2](https://cloud.githubusercontent.com/assets/3823490/3291723/7074b134-f587-11e3-8c73-d28222891a21.png)


It just occurred to me that neighbor weights for neighbors of dst will also need to be updated, potentially...! (The description above suggests this is the case: "the weight of edges incident on the new node". That includes edges to `dst`.

So, I would do the following:
```python
def min_weight(g, src, dst, n):
    # cover the cases where n only has edge to either `src` or `dst`
    w1 = g[n].get(src, {'weight': np.inf})['weight']
    w2 = g[n].get(dst, {'weight': np.inf})['weight']
    return min(w1, w2)
```
then
```python
def merge_nodes(..., weight_func=min_weight, ...):
    neighbors = set(self.neighbors(src) + self.neighbors(dst)) - set([src, dst])
    for neighbor in neighbors:
        w = weight_func(self, src, dst, neighbor, *extra_arguments, **extra_keywords)
        self.add_edge(neighbor, dst, weight=w)
```