Summary:
`Surrogate` for `ModelListGP`: constructs a `ModelListGP` with specified sub-model classes under the hood
Usage example:
```
m = BoTorchModel(
surrogate=ListSurrogate(
# Dictionary of which model class should be used to model which outcome.
botorch_model_class_per_outcome={"m": SingleTaskGP, "n": SingleTaskGP}
)
)
```
D23606005 then introduces default usage of this for cases where there are multiple X-s in Xs and they are not all the same (so we are not using batched multi-output).
Reviewed By: Balandat
Differential Revision: D23382535
fbshipit-source-id: ff524c658e09a8837f71646f309289cde4da8c33