text: Title: CI: Efficiency improvements to reduce time take by Github Actions workflows
  Body: Eg. installation of dependencies may be sped up via proper caching.
  
  For commits to PRs, we can cap python version everywhere and package versions so they can be reused rather being constantly reinstalled in CI. 
  
  For commits to master, we do not want to do this to ensure latest package versions are always being used (alerts us if something is broken due to a new version of package being released).  
  
  Anyway we can tolerate a more intensive CI process in master, it is the slow CI in PRs that is more cumbersome for developers to deal with. So efforts at improving CI efficiency should primarily focus on the CI jobs executed in commits to PRs.