Add topological sorting on cmake dependencies

If the repo manifest listed items out of their dependency ordering, then
the cmakelists would not be generated in the correct order

This couldn't be achieved easily inside cmake, as the projects don't
directly know about each other, we are doing a find_package and the only
way to add dependencies is through expliciting depending on the target,
and then you need to still run build twice, as the first time the
package config files aren't generated

This ensures that the generated CMakeLists.txt is in the correct
dependency graph ordering

This also means if you add a dependency between projects you need to
re-run parse-manifest, TODO: make this automatic by if the CMakeLists
changes then rerun parse-manifest automatically