**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
"""This checks if the BranchOperator supports branching off to a list of tasks."""
        self.branch_op = ChooseBranchOneTwo(task_id='make_choice', dag=self.dag)
        self.branch_1.set_upstream(self.branch_op)
        self.branch_2.set_upstream(self.branch_op)
        self.branch_3 = DummyOperator(task_id='branch_3', dag=self.dag)
        self.branch_3.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)
            expected = {
                "make_choice": State.SUCCESS,
                "branch_1": State.NONE,
                "branch_2": State.NONE,
                "branch_3": State.SKIPPED,
            }
            for ti in tis:
                if ti.task_id in expected:
                    assert ti.state == expected[ti.task_id]
                else:
                    raise Exception
    def test_with_dag_run(self):