Fix issue with stock movement routes.

The standard stock movement route depends upon stock_location being
specified. The StockMovementsController depends on a stock_location_id
being specified, so the correct stock movement route is the one nested
under stock location.

Using the non-nested route leads to an error "Couldn't find
Spree::StockLocation without an ID".

Fixes #4631
Improve Order#products and Order#variants methods

* Now they are an active record relations instead of an array
* All the hard job is done by the database engine now

Fixes #4615
Optimize touch_taxons on product.

This will touch all of the taxons and taxon ancestors for  a product
using a constant number of updates (2, one for taxons, one for
taxonomies).

Previously the number of updates would be 2 * the number of taxons &
taxon ancestors, as it would update the taxonmy for each taxon on each
update.

Fixes #4636
CreditCard#expiry= used to assume the incoming format was that which was enforced by Frontend's JS.

No longer true.

Fixes #4429
Fixes #4653
Load a StockItem's variant, even if it's been soft deleted

Alternative patch for #4652

Fixes #4651
Fixes #4652

Conflicts:
	core/spec/models/spree/stock_item_spec.rb
Use font-awesome-rails for the icons

Conflicts:
	backend/app/views/spree/admin/shared/_tabs.html.erb
Merge branch '2-2-stable' into 1838