Make #ancestors and #descendants recursive, not linear scans
Make #ancestors and #descendants recursive, not linear scans

Currently, calls to Vertex#ancestors and Vertex#descendants require
linear scans of every vertex in the graph. Re-implement them as
recursive traversals of #parents and #children, respectively, to
avoid future performance problems on huge graphs.

Also update the documentation to state that they include themselves
in their results, which the old implementation did but did not
document.

saab-simc-admin/keyvaluedag,saab-simc-admin/keyvaluedag