Alternative product formats

Using these formats have the following advantage:

* Use default values defined on case-classes when fields are missing from json
* Omit empty arrays and objects when serializing fields with default values
* Allows property renaming
* Override formats per field
* Allow advanced customizations

It supersedes my previous pull request:

https://github.com/spray/spray-json/pull/56