FB 33239 add mutable document revision

See https://gist.github.com/mikerhodes/c022e9e44d83c2e4747e for mini spec (objective-c version)
I'd like something which tells me why these options have been separated out, and why we want to use this slightly odd static class construct for it.