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.
Interesting that this dependency thing is done passively rather than actively - any thoughts on that? That is, when a file is changed, its cache-dependent tree is not immediately expired; the logic waits until a read to determine expiration and propagation.