Fix ILVerifier holding files open (#89127)
There were a couple things to fix
1) `PEReader` implements `IDisposable` and needs to be disposed. Not least because it is managing the lifetime of the streams opened by `File.OpenRead` calls inside `ILVerifier`
2) In order to dispose of of the pereaders, add `IDisposable` to `ILVerifier` and add a `using` to the caller that creates a new instance.
(1) and (2) fix the issues with files being held open.
While looking at the code, I didn't see a reason why `TryLoadAssemblyFromFolder` couldn't check the `_assemblyCache` before creating a opening a new stream and creating a new pereader. I don't think this was causing any issues. It just seemed like a harmless just-in-case change.