[NuGet] Reduce packages.config file reads.

When the target framework is changed in project options the
ProjectModified event is raised twice. Once for the project's
BaseDirectory and once for the projects' TargetFramework. The
ProjectModified event then causes the Packages node to be reloaded.
Each Packages node refresh would cause two separate reads of the
packages.config file. The results of the first read are now cached
until the Packages node is refreshed.

This logic can be improved further to prevent multiple reads of
the packages.config file when nothing has changed. This would require
the current state of a project's package references to be cached
instead of relying on the packages.config file. Or a way to determine
that the packages.config file has been updated and should be re-read.
[NuGet] Fix access denied error when target framework changed.

Fix UnauthorizedAccessException: Access to the path
'd:\Test\packages.config' is denied. This would occur when the target
framework of the project is changed to one that requires the
project's NuGet packages to be reinstalled.

The Solution pad is updating the Packages folder by reading the
packages.config file at the same time that the compatibility checker
is checking the NuGet packages are compatible in the background. When
the packages.config file is updated with requireReinstallation="True"
this can occasionally fail due to the file being read at the same
time. Short term fix is to update the packages.config on the UI
thread. Longer term fix is to use better logic when the Solution pad
needs to update the Packages node.