Fix race condition with product permalink generation

See this comment for a nice script on how to reproduce: https://github.com/spree/spree/issues/2714#issuecomment-19798918

Product creation in the API will now automatically be retried if an ActiveRecord::RecordNotUnique exception is thrown. This would be thrown due to the unique index which now exists on the spree_products table.

This commit also adds similar unique indexes to the orders, shipments and stock_transfers tables, although I was unable to get these showing similar behaviour to the products API in my testing.

Fixes #2714

Conflicts:
	core/lib/spree/core/permalinks.rb
Update product_spec to check for ActiveRecord::RecordNotUnique when creating a product with duplicate permalinks, rather than a typical validation error
Test clicking logo in admin returns to /admin

Fixes #3221