Complete discriminator fields implementation

Full roundtrip record -> json -> record works
Eliminates 1 level of nesting for lists of records
Allows records to be named differently than their field in a parent
record.  ie, #player{location = #point{}} will work.

Discriminator implementation roundtrip should be backwards compatible,
but the JSON generated using a discriminator field can be different for
nested records.