<!--

Welcome to Apache Airflow!  For a smooth issue process, try to answer the following questions.
Don't worry if they're not all applicable; just try to include what you can :-)

If you need to include code snippets or logs, please put them in fenced code
blocks.  If they're super-long, please use the details tag like
<details><summary>super-long log</summary> lots of stuff </details>

Please delete these comment blocks before submitting the issue.

-->

**Description**

<!-- A short description of your feature -->
This feature requests a way to support custom views in plugins without any menu. Right now, all the views listed in `AirflowPlugin.appbuilder_views` are added with menu to the appbuilder.

**Use case / motivation**
In a custom plugin I built, I need to add a distinct view for details of custom operator. Then I use the `BaseOperator.operator_extra_links` to link this new UI view with the task links.
However, this view has no need to show in the airflow menu, but rather should be shown in UI similarly to `views.DagModelView`. That is, the view should be added to flask appbuilder using `appbuilder.add_view_no_menu` call but right now all the views in `AirflowPlugin.appbuilder_views` are added by calling `appbuilder.add_view`

**What do you want to happen?**

<!-- What do you want to happen?

Rather than telling us how you might implement this solution, try to take a
step back and describe what you are trying to achieve.

-->

Maybe if "name" is missing in the dict in `AirflowPlugin.appbuilder_views` list, then when integrating plugin to flask app context, it'll just call:
```python
appbuilder.add_view_no_menu(v["view"])
```
otherwise the default behavior.

tests/plugins/test_plugins_manager.py
def test_should_return_correct_path_name(self):
        from airflow import plugins_manager
        source = plugins_manager.PluginsDirectorySource(__file__)
        self.assertEqual("test_plugins_manager.py", source.path)
        self.assertEqual("$PLUGINS_FOLDER/test_plugins_manager.py", str(source))
        self.assertEqual("<em>$PLUGINS_FOLDER/</em>test_plugins_manager.py", source.__html__())
class TestEntryPointSource:
    def test_should_return_correct_source_details(self):
        from airflow import plugins_manager
        mock_entrypoint = mock.Mock()
        mock_entrypoint.name = 'test-entrypoint-plugin'
        mock_entrypoint.module = 'module_name_plugin'
        mock_dist = mock.Mock()
        mock_dist.metadata = {'name': 'test-entrypoint-plugin'}
        mock_dist.version = '1.0.0'
        mock_dist.entry_points = [mock_entrypoint]
        with mock.patch(f'{importlib_metadata}.distributions', return_value=[mock_dist]):
            plugins_manager.load_entrypoint_plugins()
        source = plugins_manager.EntryPointSource(mock_entrypoint, mock_dist)
        assert str(mock_entrypoint) == source.entrypoint
        assert "test-entrypoint-plugin==1.0.0: " + str(mock_entrypoint) == str(source)
        assert "<em>test-entrypoint-plugin==1.0.0:</em> " + str(mock_entrypoint) == source.__html__()