Added TJsonEncode.php - mostly a clone of TJsonFields, with properties/methods bearing names with the scheme *json_field* replaced with *json_encode_field*
Designed to replace TJsonFields with a more specifically named trait as I'm going to add a TJsonDecode trait to facilitate deserialising classes from JSON
Added TJsonDecode.php - defines new TJsonDecode trait to facilitate deserialising classes from JSON.
The public API consists of a single static method: add_json_decode_field($name, $callback) - attaches the function given in $callback as a 'handler' for deserialising the JSON property in $name (currently only if $name exists in the JSON, failing silently otherwise).
Additionally to use the trait the using class needs to use one method from the 'protected api': decode_json_fields($json) - accepts a literal JSON string, a path to a JSON file or an already decoded object and passes all relevant properties to the handlers added with add_json_decode_field()
decode_json_fields() may (currently) throw an InvalidArgumentException if passed anything other than an object or string, or an Exception if passed a string/path which it cannot decode (due to errors logged by json_decode())
Refactored TJsonFields to delegate to TJsonEncode & TJsonDecode (i.e. removed all of its logic), and refactored add_json_field() to be shorthand for add_json_encode_field() & add_json_decode_field() (by taking 3 params, $name, $encode(callback) & $decode(callback), instead of 2)

N.b. This breaks the previous public API! Until versions are tagged this type of breaking update should be highly expected!