Adding in interfaces for all major classes and reworking code to use interfaces for easier testing