BUG-1886: split static classes into separate files

This is in preparation for better lifecycle management. Also reuses a
single instance of AlwaysFailOperation.

Change-Id: I13dab22841a9311b87bc6e9b79dd479c2792263e
Signed-off-by: Robert Varga <rovarga@cisco.com>
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>