Generalisation of the graph to any hashable key

Now we can have strings as nodes