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)


A few comments on this:

1. I think I prefer the signature `f(g, e1, e2)` to `f(e1, e2, g)`.
2. I think `x` is jarring here and we should use `k` instead.
3. I think we should have the flexibility to use negative weights. Additionally, `if w2 > 0` does not convey any additional information over `if self.has_edge(x, j)`. So, combine these blocks.
4. Is there a strong motivation for using `max`? If so, it would be good to write it in a comment. If not, we should consider whether this default is the right one.
5. It's possible that we may want to update the edge weight *even if `j` didn't have an edge to the new node in the first place*. For example, if the edge weight is given by average color difference, the color has changed even if there was no edge before. So, this interface still requires a bit of thought. (But I like where you're taking it!)