fn visit( graph: &BTreeMap<PackageId, BTreeMap<PackageId, Dependency>>, id: PackageId, visited: &mut HashSet<PackageId>, path: &mut Vec<PackageId>, checked: &mut HashSet<PackageId> ) -> CargoResult<()>