[RFC] add caml_modify_field and caml_initialize_field

Stephen Dolan reported that he had to do a related change as part of his Multicore-OCaml work, and it seems applicable independently of it.

This patch does not remove all uses of `Field(...)` as a lvalue, or all `&Field(..)` constructs, but only those that fit into the following patterns:

    caml_modify(&Field(v, idx), w) => caml_modify_field(v, idx, w)
    caml_initialize(&Field(v, idx, w) => caml_initialize_field(v, idx, w)

This is an exploratory patch from someone that doesn't know the runtime very well. I had some questions when working on the code, which are marked with
`/* GS: ... */` comments.

All feedback and comments are welcome.
I think this comment is still useful and should not be removed. Now it's just that the C compiler may decide to take the value of `result` before calling `funct`, but the problem is essentially the same.