Create basic Product class
Add Product#params
Add Product::Identity

- Product#params calls #params on each attribute to cascade parametrization

Fix identity parameters to reflect current system
Extract Product::Identity#params method into module

- This code is used by (nearly) every resource
- Extract #params spec into shared examples
Make spec file naming consistent
Add Product::SalesChannel resource
Add Product::Description resource
Add Product::SalesChannelCollection
Add Product#brand_id
Add Product::FinancialDetails and Product::TaxCode
Add Product::StockDetails

- Create StockDetails class
- Integrate use of class into Product
Use declarative syntax to define attributes

- Attributes declared in the class via 'attribute :name'
- The next step is to move the common code for resources into an abstract class and inherit from that.
Use AbstractResource to DRY up resource classes

  - Moved into AbstractResource
    - initialization
    - attribute creation
    - parametrization (via mixin)
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 to fetch single API resources
Use 'id' instead of 'product_id' attribute