[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.
This one looks wrong: the destination pointer `p` used to vary with the loop, now it's a constant. Also, you're still increasing `p`, which is useless. Try this:
```
       for (i = 0; i < nvars; i++)
         caml_initialize_field(accu, nfuncs * 2 - 1 + i, sp[i]);
```
Also, try to write a test that triggers the problem.