**Apache Airflow version**: 2.0.0

**Kubernetes version (if you are using kubernetes)** (use `kubectl version`):
Not relevant 

**Environment**:
Not relevant 

**What happened**:

BranchPythonOperator performs xcom push by default since this is the behavior of PythonOperator.
However BaseBranchOperator doesn't do xcom push.

Note: It's impossible to push to xcom manually because the BaseBranchOperator has no return in it's execute method. So even when using `do_xcom_push=True` it won't help 
https://github.com/apache/airflow/blob/master/airflow/operators/branch.py#L52


**What you expected to happen**:
BaseBranchOperator to do xcom push of the branch it choose to follow as the default or at least to support the parameter of `do_xcom_push=True`


tests/operators/test_branch_operator.py
super().tearDown()
        with create_session() as session:
            session.query(DagRun).delete()
            session.query(TI).delete()
    def test_without_dag_run(self):
        """This checks the defensive against non existent tasks in a dag run"""
        self.branch_op = ChooseBranchOne(task_id="make_choice", dag=self.dag)
        self.branch_1.set_upstream(self.branch_op)
        self.branch_2.set_upstream(self.branch_op)
        self.dag.clear()
        self.branch_op.run(start_date=DEFAULT_DATE, end_date=DEFAULT_DATE)
        with create_session() as session:
            tis = session.query(TI).filter(TI.dag_id == self.dag.dag_id, TI.execution_date == DEFAULT_DATE)
            for ti in tis:
                if ti.task_id == 'make_choice':
                    assert ti.state == State.SUCCESS
                elif ti.task_id == 'branch_1':
                    
                    assert ti.state == State.NONE
                elif ti.task_id == 'branch_2':
                    assert ti.state == State.SKIPPED
                else:
                    raise Exception
    def test_branch_list_without_dag_run(self):