Added GetLibraryLoaderFunc and GetLibraryUnloaderFunc to ISharedLibraryLoader interface and implemented them in SoLoader

Cleanup in ExtensionDependencyGraph

Moved BifrostLoader from core to natex component
BifrostLoader now has on overloaded constructor taking an ISharedLibraryLoaderFactory pointer to a factory to use when creating library loaders
BifrostLoader::LoadSystemExtension now takes a file path and doesn't add file extensions automatically
Moved implementation of Bifrost::CreateLibraryLoader to CC file

Added convenience class GloveSubsystemDefinition

Renamed *SubsystemRegistry to *SubsystemDefinitionRegistry and implemented a default one
Added an ISubsystemInstanceRegistry interface and default implementation for managing and instantiating ISubsystemDefinitionRegistries

Added Natex.h containing all forward declarations and public typedefs used in the native extension component

Added ISubsystem interface

Renamed glove::systemtypes namespace to glove::SystemTypes

Updated GloveCore to use new natex loading functionality

Moved GpuBufferManager implementation to GLRenderer module
Updated gtest_main.cc to use shared_ptr for glove core to fix issues using shared_from_this inside GloveCore

Updated system extension interface to use std::shared_ptrS to exchange pointers between module boundaries
Updated tests to reflect the change above