Support Side-by-Side Execution

* Hosting: [BUG FIX] Make the function that creates entry point HostInfo object thread safe.
* Hosting: [BUG FIX] Corrected the method GetCORVersion. Because the method doesn't return CLR's version but it returns the directory's path.
* Hosting: Moved the clean-up process of Boost.Log to the destructor of HostInfo again. Under the side-by-side execution, very little can be done other than it.
* Hosting: Against PortableExecutableReader, enhance the reading feature for a PE file. aggregated similar processes to handle PE header.
* Hosting: Replaced IMetaDataTables2::GetMetaDataStorage to Boost.Iostreams(memory mapped files). Because the method doesn't work well under the profiling.
* Fusion: Fusion API sometimes demands the strong name even if a private assembly is passed - it returns FUSION_E_PRIVATE_ASM_DISALLOWED, is this behavior the specifications? - Implemented the null object pattern to avoid that.
* Metadata: [BUG FIX] Corrected automated tests that are failed by the side-effect of respond to version-free.
* Metadata: Migrate to the enhanced PortableExecutableReader. Change the held data style in response to it.
* Metadata: Completely redefine the processor architecture acquisition to resolve the assembly name under the side-by-side execution.
* Profiling: Redesign the object duration of survival against the classes that have parent and child relationship.