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 think it fits the compilation cache model. I don't really care about eagerly clearing entries.