Expandable now has an encode() and decode() values

I had written before/after callbacks on the Expandable models and on the parent model,
but upon refacotring it just made a lot more sense to do data translations here,
where we are doing the trasnaltion.

Current support for:
* restricted_keys: simple array of fieldnames to ignore
* encode_date: takes fieldname as key, and format as value
* encode_csv: simple array of fieldnames we want to encode as CSV (handy)
* encode_json: boolean (support for all other arrays, etc)