TST: Use multiple instances of parametrize instead of product in tests

- All instances `product` being used inside a `@pytest.mark.parametrize` have been converted to separate instances of `@pytest.mark.parametrize`
- Extracted `product` from within tests where it was straightforward
- There are still multiple instances of `product` being used within tests for looping purporses
   - Most of the ones left do not appear to be trivial to extract
   - Some instances we might not want to remove/are clearer as-is
   - Could maybe open an issue for some of the more obvious ones?