Refactored to run with different mongo versions
- Major Refactoring to run with different mongo versions
- Nuked unnecessary abstractions
- Renamed to reflect responsibilities better