Update Order#payment_total only when saving payment

This is part of efforts to deprecate `order.update!` completely. I can't
see a reason why saving a payment would require touching stuff such as
Order#item_total for example. Plus OrderUpdater#update is very very very
expensive so we should get a lot of query improvements by not calling it
at all.

Next step to improve it could be dropping the after_save callback and
instead build our own wrapper method to save a payment and update the
order payment total. Possibly making tests faster too.
Remove typecasting from Spree::Preference

* Remove typecasting from Spree::Preference

Value is always serialized (even strings) as of 2723636. Since value is
converted upon assignment, I believe it had no effect.

* Remove Spree::Preference.value_type

Now unused since typecasting on Spree::Preference removed. There is no
need to store this (values are already serialized in the correct type).

Also removes the .valid scope on Spree::Preference. All
Spree::Preferences should be valid because they have passed migrations.

* don't pass type into preference store
* remove Spree::Preference.raw_value
Refactor Preferable#preferences

Extracts finding preference names into Preferable#defined_preferences.
And searches methods for preferred_*=, as I intend to remove
.prefers_*?.
Remove unused preference methods

This removes several methods which were never used.

* remove prefers_color?, prefers_color=
* remove prefers(:color)
* remove preferred(:color)
* remove preference_description(:color)
* remove preferred_color_description
* remove remove_preference
Preferences::Store quacks like a Hash

Preferences::Store#get (now aliased as #fetch) now behaves similarly to
Hash#fetch or Rails.cache.fetch. That is, in the event of a miss (the
preference is not yet defined), a block will be yielded and the result
of the block cached and returned.

This allows the defaults of preferences to be defined as a proc.
Don't access Spree::Config[:currency] at startup
access preferences via Preferences::ScopedStore

Objects including Preferable now always access preferences in the same
way through #preference_store, which returns an object responding to
fetch, []=, delete. This moves the responsibility of storage method
out of the object itself

ScopedStore is a proxy to the underlying cache store which adds a prefix
and suffix to the keys.
Adjust specs to save after changing preferables

Fix creation of adjustment
add a spec for deeply nested junk
add inverse_of to CalculatedAdjustments#calculator
switch to serializing preferences on records

* remove now unused preference methods
* remove save_pending_preferences
Migrate preferences onto serialized column
Update documentation at top of preferable.rb
write about preference changes in the CHANGELOG