Change the API for global roots and callbacks to avoid raw pointers.

Global roots must now be of type caml_root, and use accessor
functions to read and write.

caml_named_value has become caml_get_named_value and no longer
returns a pointer.
Allocate minor heap(s) in aligned memory.
Change API for global roots (again!) to be threadsafe.

Global roots are now simpler in both interface and implementation.