Added initial caching implementation
- This caches syntax trees and metadata references on disk
Added implementation for IsDifferent
- Design time host should only send back changed things
Added support for compiling out of process via the design time host
- If a port is specified on the command line option, the design time compiler
becomes the default. This will requests compiled projects via TCP instead
of doing it in process.
- Also split the cache out across multiple files as part of refactoring
Refactoring things in the runtime and design time host
- Split things into different files
- The DTH always compiles and keeps assembly bits in local state in each
  ApplicationContext
- Reuse the ApplicationContext for the runtime connection to DTH
- Query context ids before requesting compiled bits
- Flow errors and surface them properly
Made changes to design time host implementation
- Added ProjectChanged message type
- Moved GetCompiledAssembly and GetDiagnostics to the ApplicationContext
We still need to fix up message types to make
sending binary more efficient.
- Added comments detailing why GetHashCode wasn't implemented
Close all pending responses if there's an error in the read loop