### Apache Airflow version

2.6.0

### What happened

When marking an EMR Serverless job as failed, the job continues to run.

### What you think should happen instead

The job should be cancelled. Looking at the [EMR Serverless Operator](https://github.com/apache/airflow/blob/a6be96d92828a86e982b53646a9e2eeca00a5463/airflow/providers/amazon/aws/operators/emr.py#L939), I don't see an `on_kill` method, so assuming we just need to add that. 

I'm not sure how to handle the `EmrServerlessCreateApplicationOperator` operator, though - if the workflow has a corresponding `EmrServerlessDeleteApplicationOperator`, we'd probably want to delete the application if the job is cancelled.

### How to reproduce

- Start an EMR Serverless DAG
- Mark the job as failed in the Airflow UI
- See that the EMR Serverless job continues to run

### Operating System

n/a

### Versions of Apache Airflow Providers

`apache-airflow-providers-amazon==8.0.0`

### Deployment

Amazon (AWS) MWAA

### Deployment details

_No response_

### Anything else

_No response_

### Are you willing to submit 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)

"""Create and return an EmrHook."""
        return EmrHook(
            aws_conn_id=self.aws_conn_id, emr_conn_id=self.emr_conn_id, region_name=self.region_name
        )
    def execute(self, context: Context) -> str | None:
        self.log.info(
            "Creating job flow using aws_conn_id: %s, emr_conn_id: %s", self.aws_conn_id, self.emr_conn_id
        )
        if isinstance(self.job_flow_overrides, str):
            job_flow_overrides: dict[str, Any] = ast.literal_eval(self.job_flow_overrides)
            self.job_flow_overrides = job_flow_overrides
        else:
            job_flow_overrides = self.job_flow_overrides
        response = self._emr_hook.create_job_flow(job_flow_overrides)
        if not response["ResponseMetadata"]["HTTPStatusCode"] == 200:
            raise AirflowException(f"Job flow creation failed: {response}")
        else:
            self._job_flow_id = response["JobFlowId"]
            self.log.info("Job flow with id %s created", self._job_flow_id)
            EmrClusterLink.persist(
                context=context,
                operator=self,
                region_name=self._emr_hook.conn_region_name,
                aws_partition=self._emr_hook.conn_partition,
                job_flow_id=self._job_flow_id,