refactor: unify AccessToken structs
- Replace GroupAccessToken and ProjectAccessToken with a single AccessToken struct to adhere to DRY principles
- Create httpGetAndParse to use query params to adhere to DRY principles
- Update dependent functions (processEntity, getSubgroups, etc.) to align with these changes
- Create processGroupandSubgroup function for processing each group, its projects, and its subgroups recursively
- Ensure error handling and logging are consistent and descriptive