Hierarchical Merging

# Examples

#### `thresh=40`
![40](https://cloud.githubusercontent.com/assets/3823490/3928338/85888a96-2408-11e4-8c5b-e2b3d05bf693.png)

#### `thresh=40`
![40_2](https://cloud.githubusercontent.com/assets/3823490/3928340/8c746aaa-2408-11e4-823c-943fa45b167f.png)

#### `thresh=40`
![ball_40](https://cloud.githubusercontent.com/assets/3823490/3928345/9ac0be24-2408-11e4-8f1a-3fe758ed3023.png)

#### `thresh=60`
![60](https://cloud.githubusercontent.com/assets/3823490/3928354/aafcdbc4-2408-11e4-9701-c2471166a1f5.png)

#### `thresh=60`
![car_60](https://cloud.githubusercontent.com/assets/3823490/3928363/c02292b4-2408-11e4-8a0d-e4983adc51b1.png)






```python
   for nbr in graph.neighbors(node):
       graph[node][nbr]['heap item'][3] = False
```

before, `graph[node][nbr]['heap item'][3]` is `data`. After, it's `False`. Clearly, it should be `True`, then `False`.

btw, I don't really like writing out the loops into a function, instead of:

```python
for nbr in rag.neighbors(n1):
    _invalidate_edge(rag, n1, nbr)
```
and
```python
def _invalidate_edge(rag, n1, nbr):
    rag[n1][nbr]['heap item'][3] = False
```