Generate a lot of the DecodeJson/EncodeJson type that vary by arity.

This should cover the needs of #19, most of the changes are covered by what was removed from DecodeJson.scala and EncodeJson.scala.

There's also a couple of little improvements like some added toString methods for DecodeResult.