Major refactoring to build/run/IDE interfaces and workflow

Refactored compiler/language related things into 4 interfaces
1. IAssemblyLoader - For runtime (used for general loading and runtime compilation)
2. IProjectBuilder - Used by kpm build to create bits that will be packed inside of the nupkg
3. IProjectMetadataProvider - Used by the design time host to get metadata about the project (errors, warnings, source files etc)
2. ILibraryExportProvider - Used to figure out project references 

As part of this change, all of the code used to setup the dependency walker and library export providers has been de-duped everywhere they were used. This will make it much easier to maintain going forward. 

This change will also make it easier to use custom language across the rest of the stack once we allow loading dependencies from the project so that they can be used for building.