Issue:
`custom_headers` is available as an optional keyword argument in `build_mime_message` but it is not exposed in `send_email` or `send_email_smtp`. This prevents using custom headers with the email operator when using the default smtp backend. 

https://github.com/apache/airflow/blob/8e2a0bc2e39aeaf15b409bbfa8ac0c85aa873815/airflow/utils/email.py#L105-L116

Expected:
`send_email` should take optional key word argument `custom_headers` and pass it to `send_email_smtp` if that is the selected backend. 




tests/utils/test_email.py
@mock.patch('airflow.utils.email.send_mime_email')
    def test_send_smtp(self, mock_send_mime):
        with tempfile.NamedTemporaryFile() as attachment:
            attachment.write(b'attachment')
            attachment.seek(0)
            utils.email.send_email_smtp('to', 'subject', 'content', files=[attachment.name])
            assert mock_send_mime.called
            _, call_args = mock_send_mime.call_args
            assert conf.get('smtp', 'SMTP_MAIL_FROM') == call_args['e_from']
            assert ['to'] == call_args['e_to']
            msg = call_args['mime_msg']
            assert 'subject' == msg['Subject']
            assert conf.get('smtp', 'SMTP_MAIL_FROM') == msg['From']
            assert 2 == len(msg.get_payload())
            filename = 'attachment; filename="' + os.path.basename(attachment.name) + '"'
            assert filename == msg.get_payload()[-1].get('Content-Disposition')
            mimeapp = MIMEApplication('attachment')
            assert mimeapp.get_payload() == msg.get_payload()[-1].get_payload()
    @mock.patch('airflow.utils.email.send_mime_email')
    def test_send_smtp_with_multibyte_content(self, mock_send_mime):