[webgpu] add option to perserve device and enable in unittest (#24115)
### Description
This PR introduced a new WebGPU EP option `preserveDevice`.
Before this change, a WebGPU device will be destroyed when no inference
session uses it. The destroy of a WebGPU device will cleanup both buffer
cache and shader cache.
After this option is introduced, when the option is ON (default value is
OFF), the device will no longer be destroyed and will be always keep
alive. This is helpful in 2 scenarios:
- A server that will be always on
- unittest so that bugs of incorrect shader cache may be detected.
(thanks to @qjia7 for the suggestion)