BUG-1886: implement lock-free InMemoryDataTree.commit()
This patch reworks the data layout to remove all locking from the hold
codepaths. All state is not encapsulated in DataTreeState which is
atomically replaced.
The allocation, verification and preparation of a modification are
both lock- and wait-free.
Schema context is still synchronized to preventmadness
from concurrent schema context changes.
Commit runs lock-free, but may retry operations if it races with schema
context change -- which should happen rarely if ever.
Change-Id: I296b2805ef2575e76052e004a0d317a098d207df
Signed-off-by: Robert Varga <rovarga@cisco.com>