Refund preferences & Reimbursement Items

- Allow admins and customers to specify refund types
  - Provide a field for customers to specify a refund method preference at RMA time
  - Allow admins to specify an override refund method at reimbursement time
- Break out reimbursement_items from return_items into a separate DB table
  - Paves the way for non-return reimbursements. It also makes ReturnItem a bit simpler.

Minor:

- Fix the x icon on select2 selectboxes.
- Convert CustomerReturnsController into a ResourceController

Generated by @jordan-brough and @richardnuno

Fixes #5146
Default credit card per user

When an order is completed, we save the credit card used as the user's
default credit card. When creating a new order, we use an existing
credit card (if it exists) and attach it to the order before reaching
the payment state.

Fixes #5148
Add changelog entries for default address and credit card

See #5108 and #5148 for the actual changes.
Added payment source import from Order hash.

Fixes #5145
Fixes #5147
Fix source import specs.
Payments pass source not source_attributes.
Add default ReturnAuthorizationReasons

As per chat w/ @JDutil on IRC

Also fix similar ReimbursementType migration

Fixes #5154
RMA form fix and cancel fix

- Remove form field when the return item cannot be added.  Looks weird and it also causes nested attributes to raise.
- Cancel associated return items when canceling an RMA.  Return Item validations will ensure they can be canceled.

Fixes #5156
Stop spree_sample:load creating a duplicate record

Spree::ShippingCategory.create!(:name => "Default") is run in the following migration https://github.com/spree/spree/blob/master/core/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb therefore a create command here would create a duplicate if a db:migrate had been run prior. shipping_categories.rb could be removed from samples completely but users of db:reset (that uses db:schema:load and loads the db from schema not migrations) would need it to be created here.

Fixes #5161
Revert ReimbursementItem model

This removes ReimbursementItem model and squishes it back into the ReturnItem model.
We split this model out of ReturnItem and we still think that's a good idea.  But we've run into some issues with it so we'll have to look at adding it back in later when we can work through all the details.

Fixes #5160
Make return item eligibility validator more extensible. Add a validator for RMA presence
Fixes #5159
Fix load_user_roles. Fixes #5141
Mark inventory units as shipped in order importer.
Allow posting to ResourceController without parameters

When the associated model doesn't require any attributes.
Needed this for some returns & exchanges stuff.
Similar to 3be886f7de8a2f8515633c4d1d218140dc4373bc

Also, beef up ResourceController specs a bit.

Fixes #5158
Create a default calculator to determine a return item's default refund amount
Fixes #5162
Reload to make sure shipment.inventory_units have the latest status so that shipment.backordered? return correct value
Fixes #5163
Enhances ability of extensions to customize line items and the entire cart composition process.

Fixes #5087
Extract current order params to a function.

The parameters used to find and create orders is duplicated in 3 places.
Extracting them to a function reduces duplication, and will allow store
maintainers to place conditions on what makes an order unique. An
example would be store restrictions like spree-multi-domain, that
currently have to use an ugly module_eval.

Fixes #5164
Adds more specific error messages to promotions.

When checking if a promotion is eligible, the rules can specify why they
are ineligible by populating `eligiblity_errors`. The first error is
then displayed to the customer instead of a generic message.
Add better error messages for item total rule.