issue #20044: Add support for JSON patches

This change requires running:
git submodule update --init --recursive 

Reorganizes "big four" datasource functions as follows:
retrieveRecord              -> get (id)
fetch                            -> get (query)
commitRecord (new)     -> post (data)
dispatch                       -> post (dispatch)
commitRecord (update) -> patch (data)
commitRecord (delete)  -> delete (id)

There are database functions for get, post, patch and delete that include documentation and examples. All four original calls on XT.datasource have been collapsed into one function "request" that accepts the request method (get, post, patch, delete) as the second argument.

Implemented optimistic record locking on all orms set as "lockable." The new model property where the optimistic lock version is stored is called "etag." Any request that alters an existing record must include an etag version. Pessimistic locking is no longer automatic and must be performed by a post/dispatch call to "obtainLock." XM.Model has been reimplemented to do this automatically on a successful fetch.