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