starting a complete rewrite to make a more generic graph library