**Description**

The operator is arguably unnecessarily limited to AI Platform’s standard images. The only change that is required to lift this constraint is making `package_uris` and `training_python_module` optional with default values `[]` and `None`, respectively. Then, using `master_config`, one can supply `imageUri` and run any image of choice.

**Use case / motivation**

This will open up for running arbitrary images on AI Platform.

**Are you willing to submit a PR?**

If the above sounds reasonable, I can open pull requests.
tests/providers/google/cloud/operators/test_mlengine.py
mock_hook.assert_called_once_with(
            'google_cloud_default',
            None,
            impersonation_chain=None,
        )
        hook_instance.create_job.assert_called_once_with(
            project_id='test-project',
            job={'jobId': 'test_prediction', 'predictionInput': input_with_uri},
            use_existing_job_fn=ANY,
        )
        self.assertEqual(success_message['predictionOutput'], prediction_output)
    def test_invalid_model_origin(self):
        
        task_args = self.BATCH_PREDICTION_DEFAULT_ARGS.copy()
        task_args['uri'] = 'gs://fake-uri/saved_model'
        task_args['model_name'] = 'fake_model'
        with self.assertRaises(AirflowException) as context:
            MLEngineStartBatchPredictionJobOperator(**task_args).execute(None)
        self.assertEqual(
            'Ambiguous model origin: Both uri and ' 'model/version name are provided.', str(context.exception)
        )
        
        task_args = self.BATCH_PREDICTION_DEFAULT_ARGS.copy()
        task_args['uri'] = 'gs://fake-uri/saved_model'
        task_args['model_name'] = 'fake_model'
        task_args['version_name'] = 'fake_version'
        with self.assertRaises(AirflowException) as context:
            MLEngineStartBatchPredictionJobOperator(**task_args).execute(None)
        self.assertEqual(
            'Ambiguous model origin: Both uri and ' 'model/version name are provided.', str(context.exception)