adding a separate singleton base class with a cleaner singleton pattern

Adding a separate abstract singleton class allows for separation of concerns. The singleton base class now handles implementation of singleton pattern and ensuring only one instance ever exists while the main params class can focus on retrieving the parameters cast to desired type.