Break out LocalChanges into a separate functor.
Summary: `LocalChanges` is really tightly wrapped up with our usual shared memory access, which makes it difficult to change how we do direct shared memory access (such as by adding profiling) without putting it directly into `Raw`, even if we would like to functorize it and make it optional. This change breaks out `Raw` (renamed to `Immediate`) and `LocalChanges` into separate modules/functors so that in later diffs we'll be able to swap out the lowest level of shared memory access (well, the lowest OCaml level of it).
Reviewed By: samwgoldman, jamesjwu
Differential Revision:
D13052451
fbshipit-source-id:
608a1424fc9bba5a10fe74cac7a19acab692dc9b