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