**Description**

Replace the Configuration JSON text-area with a form that has individual input fields for each key & value. This will remove the need for the user to provide a json object. See hashicorp vault's key-value secrets UI for an example of what this might look like:

![Screenshot 2020-09-21 at 12 06 03](https://user-images.githubusercontent.com/17148324/93759844-df04f680-fc02-11ea-8613-f3bcc0b22d09.png)
 
- If present these keys and values should be serialised as json client-side and posted to the trigger-dag API endpoint as the `conf` request-parameter.
- By default no conf request-parameter is sent. Perhaps a checkbox should be used to determine whether conf is sent at all?
- The user may want to add new keys, or remove keys & values that they have previously added.
- [PR-10839](https://github.com/apache/airflow/pull/10839) is pre-populating the form with the DAG's default params. The new form should be pre-populated with the keys & values from `DAG.params`


**Use case / motivation**

Currently when triggering a manual DAG run with user-provided runtime parameters, the user has to provide a correctly formatted JSON object. Filling in a form with keys & values will be a significantly better user experience, and will be less error prone & laborious than handling json in a free-text field.

This builds on the great work already done on enhancing the Trigger-DAG functionality

**Related Issues**

Originating PR: https://github.com/apache/airflow/pull/10839
num_of_all_dags = status_count_paused
            else:
                current_dags = all_dags
                num_of_all_dags = all_dags_count
            sort_column = DagModel.__table__.c.get(arg_sorting_key)
            if sort_column is not None:
                if arg_sorting_direction == "desc":
                    sort_column = sort_column.desc()
                current_dags = current_dags.order_by(sort_column)
            dags = current_dags.options(joinedload(DagModel.tags)).offset(start).limit(dags_per_page).all()
            user_permissions = g.user.perms
            can_create_dag_run = (
                permissions.ACTION_CAN_CREATE,
                permissions.RESOURCE_DAG_RUN,
            ) in user_permissions
            dataset_triggered_dag_ids = {dag.dag_id for dag in dags if dag.schedule_interval == "Dataset"}
            if dataset_triggered_dag_ids:
                dataset_triggered_next_run_info = get_dataset_triggered_next_run_info(
                    dataset_triggered_dag_ids, session=session
                )
            else:
                dataset_triggered_next_run_info = {}
            for dag in dags:
                dag.can_edit = get_airflow_app().appbuilder.sm.can_edit_dag(dag.dag_id, g.user)
                dag.can_trigger = dag.can_edit and can_create_dag_run
                dag.can_delete = get_airflow_app().appbuilder.sm.can_delete_dag(dag.dag_id, g.user)
            dagtags = session.query(func.distinct(DagTag.name)).all()
            tags = [
                {"name": name, "selected": bool(arg_tags_filter and name in arg_tags_filter)}
                for name, in dagtags