[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.
AFAICT, the only problem you might have is sign-extension of a 32-bit argument into your 64-bit `idx` parameter. If you change it to unsigned, I've no idea what C would do when promoting a signed 32-bit to an unsigned 64-bit. Probably implementation-dependent.
In any case, I don't think we should be worrying too much about support for access to fields with negative indices.