Historically we have two variations of modules(DSOModule and SystemLibModule) that both exposes module via symbols. This PR creates a common implementation for both, and introduce a Library base class that allows us to have different implementations of GetSymbol. It paves ways for future library related module enhancements.