LeafSetNode implementations currently store their children in maps, which leads to a few bad interactions:
- the fact that SystemLeafSetNode in fact contains Set<LeafSetEntryNode> is not exposed
- the fact that UserLeafSetNode in fact contains a List<LeafSetEntryNode> with unique values is not exposed
- UserLeafSetNode uses an inefficient LinkedHashMap implementation internally
- UserLeafSetNode offset access performs iteration on values
We should address these concerns by making LeafSetEntryNodes transient, similar to how LeafNodes are transient in containers.
We should also use a simple Set for SystemLeafSetNode storage and use a List for UserLeafSetNode storage.
The latter also needs a suitable UniqueList interface defined in yang.common, which is an extension of java.util.List with an additional guarantee of values being unique (similar to java.util.Set).