Json write api

WIP for adding constructors to the types generated by JsonProvider

* [x] Support empty record type (currently appearing as IJsonDocument in the constructor signature)
* [x] Support heterogeneous types
* [x] Tests record types
* [x] Tests heterogenous record types
* [x] Tests arrays
* [x] Tests heterogeneous arrays
* [ ] Add helpers to construct JsonValue's directly (#419)
* [x] Docs