Reduce the number of cascading touches.

For better performance, don't call `touch` when not
necessary.

* After saving a product, but neither the product nor its
  default price changed, don't touch it.
* After saving a stock item, only touch the variants if the stock
  item changed.

Background: in ActiveRecord, if a product has not changed,
product.save will not write to the DB--but it *will* fire
the `after_save` callback. In that case there is no need to
touch anything.

Also factored out a method in variant.rb.

*NOTE* :boom: if PR is approved, let me know so I can submit it back to Spree.