A crazy amount of changes to make running in VS faster

Big changes here are: 
- The new caching system for compilations
- The new caching interface is used across all application contexts in the design time host so maximum sharing happens as a result.
- The runtime has support for delegating project compilation to a compilation server. A --port flag was added to accommodate this.
- The design time host only sends changed thins now. A basic implementation of IsDifferent was implemented.
- IMetadataProjectReference was changed to accept `Func<ILibraryExport>` instead of incomingReferences and incomingSourceReferences to avoid evaluating the dependency tree until required.
I'm not sure this is a problem because we're using this to compare if a token matches or not. The bigger issues around case insensitive paths are when we're actually looking for files on disk.