restrict cost_price to admin users through the api
Promotion Rule: One Use Per User

This will limit a promotion from being used multiple times by a single
user.

Closes #4984
Basic promotion categories.

This allows a promotion to be assigned to a category for better
filtering.

Add ability to search by promotion category.

Manage promotion categories.

Provides CRUD for promotion categories, linked from the promotions page.

Closes #4992
Reduce unnecessary DB round-trips.

Spree::Product has after_save :touch in order to fire
the after_touch callback. But as a result, every Save updates
the product twice. There's no need to call `touch`
after a save if all you want to do is fire the after_touch
callback. So I fixed that.

I also fixed `punch_slug`, which gets called after_destroy,
so it does a single round-trip instead of about six.
After a destroy has already happened, it is unnecessary to
validate the product again, call callbacks again, touch the
product again, and fire all cascading touches again.

Closes #5049
fix failing specs with variant price
Fix typo in item_adjustments
refactor the variant price for product.js.coffee. Thanks @gmacdougall
Make sure cart adjustments partial gets rendered if there are shipments.
Update edit.html.erb
Order summary view checks if delivery step has been passed in the checkout flow before displaying any shipping charges.
Merge pull request #5056 from jschwertfeger/fix/show-cart-adjustments-if-there-are-shipments

Make sure cart adjustments partial gets rendered if there are shipments.
Merge pull request #5058 from owainlewis/master

Allow users to edit email address
Merge pull request #5053 from jschwertfeger/fix/show_order_shipping_charges_after_delivery_step

Check if past delivery step before displaying shipping charges in order summary
Order#checkout_step_index always return a integer
Merge branch 'api_hide_cost_price' of github.com:godaddy/spree into godaddy-api_hide_cost_price
Load current user roles on api requests
Remove tables from includes on index query which are not needed an result in bad performance with many Variants
Add admin flag on variants related cache template

We want to make Variant#cost_price only available for admins so we need
to make sure difference cache keys are set as per current user role
otherwise the first template cached would decide whether or not the
attribute would be available (rather than the user role itself)
Merge pull request #5063 from danielwestendorf/optimize_backend_products_query

Remove tables from includes on index query which are not needed an resul...
Merge pull request #5052 from brchristian/patch-6

Fix typo in item_adjustments