* do not use `and` for non mutually recursive types
* use List.init, fix complexity of a few operations and make some code
more readable
* explicit some parameters to make working without LSP/Merlin easier
* use fold_left instead of filteri because it is not available on old
OCaml versions
This patch refactors the update_api script and the z3.ml implementation
to properly translate between OCaml options and NULL pointers. Some
unifications and simplifications (avoidance of unnecessary value allocation)
in the script that creates the native bindings.