Refactored Json conversions to share more logic with Csv and Xml

Previously, the Json optional properties used JsonRuntime.ConvertOptionalProperty on top of the base case of non-optional properties
Now it's the other way around : all conversions return optionals, and for non optional properties we call JsonGetNonOptionalValue. This is done in Helpers.convertValue like in Csv and Xml
Also separated Conversions into TextConversions and JsonConversions
Refactored Json conversions to share more logic with Csv and Xml

* Previously, the Json optional properties used JsonRuntime.ConvertOptionalProperty on top of the base case of non-optional properties. Now it's the other way around : all conversions return optionals, and for non optional properties we call JsonGetNonOptionalValue. This is done in Helpers.convertValue like in Csv and Xml
* Separated Conversions into TextConversions and JsonConversions
* Separated out Conversions from Helpers
* Replaced some untyped quotations by typed quotations
* Prevent operations being done twice. Eg, previously was "Operations.GetNonOptionalValue("Attribute surname", Operations.ConvertString(XmlOperations.TryGetAttribute(this, "surname")), XmlOperations.TryGetAttribute(this, "surname"))" now it's "let value = XmlOperations.TryGetAttribute(this, "surname") in CommonRuntime.GetNonOptionalValue("Attribute surname", CommonRuntime.ConvertString(value), value)"