Haoyang, Jeff (FYI): atdj revival

Besides some reformatting and splitting up the original file  `atdj.ml` into modules, the only changes are:
* the relatively recent `wrap` constructor is now happily ignored instead of causing an error.
* optional record fields containing a variant or a record are still not really supported, but such fields become required with a warning. This is useful for field declarations such as `` ~kind <ocaml default="`X">: kind; `` when combined with the `-j-defaults` of atdgen on the producer (ocaml) side (this guarantees that the JSON record will have this field), making the consumer (java) happy.

Other missing features are listed in the `TODO` file.