refactor(*): introduce getProductsByRawOptions method

This is a low level method to fetch products. Other
methods can built up on this method with great flexibility
while still getting caching for free.