Add array and hash to spree preferences

This will add hash and array support to the spree preferences. Currently, Hash's and Array's are handled by spree's any ability, but this is not effective when converting data.

Right now, when an array is submitted, it will be stored as an Array. If it is not an Array, it will use `#wrap` to make it an array, otherwise, return an empty array.

For the Hash, I've added quite a bit of functionality. When a string is submitted as a hash, there will be an attempted `JSON.parse` but this only works with hashes that are using strings for their keys. I thought about adding support for keys which are symbols, but this would be done using `eval` and it might compromise security.

When an array is submitted, we first attempt to try `.to_h` if they're on ruby 2.0. If so, it works. `to_h` only works on nested arrays, see specs for example, which may cause a `TypeError` to be raised. If so, then its not a nested Array and instead of running the array in via a `.to_h`, we attempt to create a new hash with the splat operator.
Awesome. I get to delete some code.