Very big refactor and code cleanup (more to come later)

- Cleaned up all comments, organised all imports.
- Cleaned up a lot of code (better readability, cleaner code).
- Optimized abstract classes and enum strategies.
- Moved around some packages for better and clearer structure and
renamed some classes for the same purpose.