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

Fixes #4373
Refactor Preferable#preferences

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

Fixes #4373
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

Fixes #4373
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.

Fixes #4373
Don't access Spree::Config[:currency] at startup

Fixes #4373
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.

Fixes #4373
Adjust specs to save after changing preferables

Fix creation of adjustment
add a spec for deeply nested junk

Fixes #4373
add inverse_of to CalculatedAdjustments#calculator

Fixes #4373
switch to serializing preferences on records

* remove now unused preference methods
* remove save_pending_preferences

Fixes #4373
Migrate preferences onto serialized column

Fixes #4373
Update documentation at top of preferable.rb

Fixes #4373
write about preference changes in the CHANGELOG

Fixes #4373