Obs_storage: ensure serialization of single-stmt writes in TX wrt. nested TXs.

example:

  D.read_committed_transaction ks
    (fun ks ->
       (D.put_columns ks table "key" cols >>
        ... >>
        D.put_columns ks table "key2" cols2) <&>
       D.read_committed_transaction
         (fun ks -> D.put_columns ks table "key3" cols3))

in the current implementation of nested TXs, the statements from the 1st
thread must be serialized wrt. the nested TX, lest the nested TX drop
the data written by concurrent single-statement writes that happened after it
began (since it takes a snapshot of the parent TX's added/delete column maps
and replaces the parent's on successful comit).
Added Obs_finalise module.
Obs_storage: ensure finalizers are run in main thread.
Remove Obs_finalise: use Lwt_gc.finalise, safe as of Lwt 2.4.3.
Obs_protocol_server: more informative msg for TX keyspace registration.
Explicit -warn-error compiler flag for 4.00.1 compatibility.

Must override omake's -warn-error Az default.