Preferences Refactor

Hijacking the previous PR into a larger preferences refactor. This will depend on two other pull-requests, #4383 and #4337.

### Contains the following changes

* Moves preferences defined on a record (as opposed to `Spree::Config`) to a serialized `preferences` column.
* allows preferences' defaults to be defined as a proc
* remove a bunch of unused preference methods
* removes the value_type column. Performing a typecast as values are loaded from the table is unnecessary, as they are already being deserialized into the correct type.

### Still TODO
* [x] Migrate existing settings onto the serialized columns
* [x] Document the changes in the CHANGELOG and release notes
* [x] A few weird corner cases need better specs (caught in specs outside core) and an apparent rails bug needs investigation (which has a workaround in place for now)