Expose JSON Schema generator to allows client to override generation

This transaction is about making it possible to expose the json generator in such a way that client can more easily create subtypes of the JSON Schema, in particular those with hypermedia extensions. To this end a callback has been created that allows clients to intercept and replace calls that are involved with creating the objects required.

At the moment this change is without testing as I want to get some feedback on whether the changes are reasonable. One I have some good feedback I will put some suitable testing in place.