### 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
"""
        Get job descriptions from AWS batch
        :param jobs: a list of JobId to describe
        :type jobs: List[str]
        :return: an API response to describe jobs
        :rtype: Dict
        """
        ...
    def get_waiter(self, waiterName: str) -> botocore.waiter.Waiter:
        """
        Get an AWS Batch service waiter
        :param waiterName: The name of the waiter.  The name should match
            the name (including the casing) of the key name in the waiter
            model file (typically this is CamelCasing).
        :type waiterName: str
        :return: a waiter object for the named AWS batch service
        :rtype: botocore.waiter.Waiter
        .. note::
            AWS batch might not have any waiters (until botocore PR-1307 is released).
            .. code-block:: python
                import boto3
                boto3.client("batch").waiter_names == []
        .. seealso::
            - https://boto3.amazonaws.com/v1/documentation/api/latest/guide/clients.html#waiters
            - https://github.com/boto/botocore/pull/1307
        """
        ...
    def submit_job(