### Description

Add a sensor for AWS Batch jobs that will poll the job until it reaches a terminal state. 

### Use case/motivation

This feature will enable DAGs to track the status of batch jobs that are submitted in an upstream task that doesn't use the BatchOperator. An example use case - The batch job is submitted by an upstream PythonOperator, with its own functional logic, that returns the job_id of the submitted job.

### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

airflow/providers/amazon/aws/hooks/batch_client.py
"""
        Check the final status of the batch job; return True if the job
        'SUCCEEDED', else raise an AirflowException
        :param job_id: a batch job ID
        :type job_id: str
        :rtype: bool
        :raises: AirflowException
        """
        job = self.get_job_description(job_id)
        job_status = job.get("status")
        if job_status == "SUCCEEDED":
            self.log.info("AWS batch job (%s) succeeded: %s", job_id, job)
            return True
        if job_status == "FAILED":
            raise AirflowException(f"AWS Batch job ({job_id}) failed: {job}")
        if job_status in ["SUBMITTED", "PENDING", "RUNNABLE", "STARTING", "RUNNING"]:
            raise AirflowException(f"AWS Batch job ({job_id}) is not complete: {job}")
        raise AirflowException(f"AWS Batch job ({job_id}) has unknown status: {job}")
    def wait_for_job(self, job_id: str, delay: Union[int, float, None] = None) -> None: