Graphs functionality

This PR adds some basic graphs functionality.

It defines `UndirectedGraph`, `DirectedGraph` and `Tree` classes. Some examples of the added functionality are `find_path`, `find_all_paths`, `find_shortest_path` and the ability to get `parent` and `children`. Especially for trees, there are functions as `depth_of_vertex`, `vertices_of_depth`, `is_leaf` and `leaves`. In the `UndirectedGraph` class there is the `minimum_spanning_tree` method which given an `ndarray` of weights per edge, it returns the MST `Tree` instance.

Finally, the `PointTree` class is added (similar to the existing `PointGraph`) with the ability to update the graph `from_mask` and compute the relative locations between the vertices of an edge (methods `relative_location_edge` and `relative_locations`).