**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
]
            owner_links_dict = DagOwnerAttributes.get_all(session)
            import_errors = session.query(errors.ImportError).order_by(errors.ImportError.id)
            if (permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG) not in user_permissions:
                
                import_errors = import_errors.join(
                    DagModel, DagModel.fileloc == errors.ImportError.filename
                ).filter(DagModel.dag_id.in_(filter_dag_ids))
            for import_error in import_errors:
                flash(
                    "Broken DAG: [{ie.filename}] {ie.stacktrace}".format(ie=import_error),
                    "dag_import_error",
                )
        from airflow.plugins_manager import import_errors as plugin_import_errors
        for filename, stacktrace in plugin_import_errors.items():
            flash(
                f"Broken plugin: [{filename}] {stacktrace}",
                "error",
            )
        num_of_pages = int(math.ceil(num_of_all_dags / float(dags_per_page)))
        state_color_mapping = State.state_color.copy()
        state_color_mapping["null"] = state_color_mapping.pop(None)
        page_title = conf.get(section="webserver", key="instance_name", fallback="DAGs")
        page_title_has_markup = conf.getboolean(
            section="webserver", key="instance_name_has_markup", fallback=False
        )
        dashboard_alerts = [
            fm for fm in settings.DASHBOARD_UIALERTS if fm.should_show(get_airflow_app().appbuilder.sm)
        ]
        def _iter_parsed_moved_data_table_names():