* do not find tools from environment variables since it needs a lot of works on some platforms, such as macOS
* add `external_editors.json` to allow user configure paths directly
code_review:
* use JsonSerializerContext to avoid AOT warnnings
* since we call TryAdd by interating the installed tools, so detecting by environment variable becomes meaningless (it can not detect tools not installed by Toolbox). Just add it into founded directly
* remove unnecessary type defines
* determine the Icon used by tool while adding it to the founded list.
# Conflicts:
# src/Native/Linux.cs
# src/Native/MacOS.cs
# src/Native/Windows.cs