'LoadPluginOrProviderBridge' should load the library_path as absolute (#24587)
### Description
`LoadPluginOrProviderBridge` is called when attempting to load a Plugin.
It uses the passed `library_path` to attempt to load the Plugin as a
`Provider` - using `ProviderLibrary` - to see if it can be treated as a
'ProviderBridge'. `ProviderLibrary` attempts to load the Provider by
prefixing the path to the onnxruntime.dll. Plugins needn't be
redistributed with OnnxRuntime, so the path to the Plugin _may_ be an
absolute path, and if so `ProviderLibrary` fails. At the same time -
however - `LoadPluginOrProviderBridge` needs to support
OnnxRuntime-relative paths: As 'Providers' are migrated to 'Plugins',
existing Providers should be usable as Plugins. To accommodate both
scenarios, this PR:
1. Adds support to `ProviderLibrary` to be created with an absolute
path.
2. Validates the path passed to `LoadPluginOrProviderBridge`;
1. if it is absolute, the same absolute path is passed to
`ProviderLibrary` and `EpLibraryPlugin`.
2. if the path is not absolute, it is converted to an absolute path by
prefixing the OnnxRuntime location, and the same path is passed to
`ProviderLibrary` and `EpLibraryPlugin`.
### Motivation and Context
This PR enables `LoadPluginOrProviderBridge` to be called with an
absolute path to the Plugin, allowing it to be used as a
'ProviderBridge', or with an OnnxRuntime-relative path to the Plugin.
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>