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.
Yeah I see - I guess I'm not sure where we got tokens from. Could one place get a token for `C:\FOO.CS` and another place have one for `c:\foo.cs` (both equivalent on Windows) and the comparison would be problematic? If you say it's fine, that's fine.