Properly add/remove metadata references in MSBuild project system
Properly add/remove metadata references in MSBuild project system

I recently noticed an issue that has likely been present for a long while. Essentially, metadata
references are never removed from the workspace. The reason for this is because Roslyn's MetadataReference
class does not implement value equality -- it just inherits the default `Equals()`/`GetHashCode()`
implementations from `System.Object`. However, the algorithm for adding and removing metadata references
assumes value equality. This is easily fixed by adding our own `IEqualityComparer<MetadataReference>`
that first checks to ensure that `MetadataReferences` are `PortableExecutableMetadataReferences` and then
uses their file paths for equality.

OmniSharp/omnisharp-roslyn,OmniSharp/omnisharp-roslyn,DustinCampbell/omnisharp-roslyn,DustinCampbell/omnisharp-roslyn