Refactor build to not depend on roslyn directly
- Added interfaces IProjectBuilder and implementation
- Decoupled compiling to disk and package building
- Added builder as a concept to project.json's extensibility
Refactor services
- Changed loader to services.
- Project services include a loader, builder, metadata provider and
  a library export provider.
- Added RoslynLibraryExportProvider and ProjectLibraryExportProvider
- Removed ProjectBuilder.cs
Remove duplicate logic
- Made ApplicationHostContext which is a helper that has
 consistent logic for creating the right sequence of objects
 for a proper runtime environment.
- Use it from kpm build/pack, k run and the design time host
- Reimplemented kpm build --check with IProjectMetadataProvider
Copy metadata references before expanding them
Use ILibraryExportProvider as the compilation interface
- Call into the ILibraryExportProvider from the RoslynAssemblyLoader,
  RoslynProjectBuilder and RoslynProjectMetadataProvider
- Simplified caching in RoslynAssemblyLoader and RoslynLibraryExportProvider
- Added a noop IFileWatcher to the host container
- Remove caching and library export functionality from the RoslynCompiler
Moved GetCompilationContext into a shared helper
Allow adding services to the ApplicationHostContext
- Fixed the file watcher
RoslynAssemblyLoader loads assembly multiple times when concurrently
invoked

The call to CompileInMemory produces a new assembly for the assembly name
every time it is invoked. Consequently when it's invoked concurrently, we
end up with two assemblies that represent two instances of the same
source.

We'll prevent this by preventing concurrent calls to IAssemblyLoader.Load
from the bootstrapper
Fix infinite recursion caused by kpm pack to a dir in project dir
Renamed configurations to frameworks in project.json
Disabled amd64 version of crossgen tests to work around problem
Another round of refactoring to unify project extensibility
- Made it so that the only important interface is the ILibraryExportProvider
- Removed RoslynAssemblyLoader, RoslynProjectBuilder,
  and RoslynProjectMetadataProvider. Alternatives are baked into the runtime.
- Added Emit and GetDiagnostics methods to IMetadataProjectReference. This allows
kpm build, k run and the design time host to be "compiler"/project agnostic.
Fix symbol packages
- Add all of the output to the symbol packages
- Add just the dll and xml file to the main package
Introducing IProjectExportProvider
- The ProjectLibraryExportProvider will do all the prep work to
  resolve project dependencies then will call into the IProjectExportProvider
  with a library export.
- This will make it much easier to implement other compilers as well
as "pre-compiled" projects
Fixed shared files in design time host
- Added GetSources to IMetadataProjectReference. This is so that
 the design time host can retrieve the list of files used to create the project
export. The list of files may contain more than just the files from the project list
so this is required to do anything real.
Small clean up
- Added ProjectBuildResult
- Removed IsError and GetMessages from RoslynCompiler
- Remove IsMono check from the loader and instead just check
 for an empty pdb stream.
Made project dependency resolution lazy
- Change ILibrary to take a Func<ILibraryExport> in GetProjectExport
so that cached results don't evaluate dependencies.
- Removed transitive caching since it happens for free
- Use ConcurrentDictionary for the MetadataFileReferenceFactory and
  compilation cache.
- Improved tracing in the RoslynCompiler and RoslynProjectReference
- Moved caching into ProjectLibraryExportProvider
BuildManager should return failure code when compilation fails
Extending kpm build
- Added ability to write a compiler as a package/project by
adding the default host to the host container.
- Flow configuration from klr.host.
- Specifying the KRE_CONFIGURATION env variable will also set the configuration
Delegate loading to the IMetadataProjectReference
- This avoids creating MemoryStreams in cases where
the project can load for e.g. from disk. This will come
in handy when we need to load projects from disk (precompiled)