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>
(cherry picked from commit fa617231bb83ab0c45e6a5c8cabeec2b8fe1efeb)
BUG-1886: eliminate sychronized blocks

The tree state is guarded by the read-write lock, so there is no need
for the additional, overly large, critical section. This allows empty
operations to complete completely lockfree.

Change-Id: Iee01f4745a4927e6dc5093252c15d7d4e3959e9a
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit 66e428b873f427038424051e00d4a09e8918c667)
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>
(cherry picked from commit 8b5a70355134bfeb6b4d3299bff733817d9eb72b)
Merge changes I296b2805,Iee01f474,I13dab228

* changes:
  BUG-1886: implement lock-free InMemoryDataTree.commit()
  BUG-1886: eliminate sychronized blocks
  BUG-1886: split static classes into separate files