Make the `ExtensionSource` struct use the [union discriminator pattern](https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/1027-api-unions/README.md#discriminator-field), and add associated CRD schema validation.