TopoOpt: Co-optimizing Network Topology and Parallelization Strategy for Distributed Training Jobs