Optimize AbstractDocumentedDataNodeContainer.getDataChildByName()

Datastore-intensive workload shows 2% CPU expended in this method, with
three quarters of that actually eaten up by the iterator (and the rest by
1M invocations of QName.equals()). Given that we know that childNodes
are keyed by the QName, this is utterly wasteful, so let's do a simple
lookup.

Change-Id: I44688cb92031b2d75a09d58bd76c63bb28ccbfae
Signed-off-by: Robert Varga <rovarga@cisco.com>
Cache public view of children of AbstractImmutableDataContainerNode

Tracing of a datastore-heavy workload shows about 1% CPU being spent
in getValue(). This allocates 1.8M objects, just to throw them away.
Rather than that, let's wrap the map itself, which guarantes .values()
to be immutable, thus eliding the CPU cost.

Change-Id: Ieef0a2bb791ffd99f934457444d168f1a6c9fd77
Signed-off-by: Robert Varga <rovarga@cisco.com>
Merge "Optimize AbstractDocumentedDataNodeContainer.getDataChildByName()"
Merge "Cache public view of children of AbstractImmutableDataContainerNode"