Make authentication error checking more robust

It now no longer fails if the body is blank
Used Parametrizable shared examples in Product spec

- rename valid_params to params for seamless integration
Use RSpec 'subject' instead of 'let'
Add custom field attributes to Product
Map JSON resource keys programmatically to params
Add Product.get

- Currently, the Product always gets Products with custom fields as these are hardcoded into resource_options
- The tests check to see the correct endpoint is hit with the correct range value