For validation we use `dag.Graph` but we currently do not setup edges between nodes similar to how its done for [runtime](https://github.com/grafana/alloy/blob/66b0c353ce62c7951280070b3586be59f2b5e9bf/internal/runtime/internal/controller/loader.go#L600). With edges between nodes we can validate that there are no circular references and that nodes we reference exists. We should add the same references that we do for runtime https://github.com/grafana/alloy/blob/main/internal/runtime/internal/controller/loader.go#L600 and perform similar lookup as we do here https://github.com/grafana/alloy/blob/main/internal/runtime/internal/controller/component_references.go#L44C6-L44C25