[api] Cache products/show view

This can reduce the time it takes for a request to /products from > 1 second to < 75ms

Before: 1048.7ms
After: 65ms

If a product property, option value, option type, image or variant of a product changes then the product will be touched which will invalidate the cache.
Use templates for option_values + option_types in products/show to DRY up things