**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.
airflow/providers/google/cloud/operators/mlengine.py
"""
    Replaces invalid MLEngine job_id characters with '_'.
    This also adds a leading 'z' in case job_id starts with an invalid
    character.
    :param job_id: A job_id str that may have invalid characters.
    :type job_id: str:
    :return: A valid job_id representation.
    :rtype: str
    """
    
    match = re.search(r'\d|\{{2}', job_id)
    if match and match.start() == 0:
        job = f'z_{job_id}'
    else:
        job = job_id
    
    tracker = 0
    cleansed_job_id = ''
    for match in re.finditer(r'\{{2}.+?\}{2}', job):
        cleansed_job_id += re.sub(r'[^0-9a-zA-Z]+', '_', job[tracker : match.start()])
        cleansed_job_id += job[match.start() : match.end()]
        tracker = match.end()
    
    cleansed_job_id += re.sub(r'[^0-9a-zA-Z]+', '_', job[tracker:])
    return cleansed_job_id
class MLEngineStartBatchPredictionJobOperator(BaseOperator):