Bug 1443: Implemented Lazy deserialization using dynamic proxies

Result objects from translation from NormalizedNode to Binding Data
are lazily deserialized and initial cost of deserialization
is only one allocation.

Nested data are lazily deserialized once they are accessed.
This decreases time spent on eager deserialization of data
which never was accessed.

Implementation is mostly carried out in
LazyDataObject - InvocationHandler which maps proxy, data and codec
DataContainerPrototype - Prototype of DataContainerContext,
which holds only neccessary information to instantiate real context
DataObjectCodecContext - Context which holds various mapping
required for serialization / deserialization of data.

Also renames AugmentationNode to AugmentationNodeContext to keep naming
consistent and hides it from outside world, as it is
implementation-specific detail.

Change-Id: I94d994277bd0319e9aabcf842e0a741871713a30
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
Signed-off-by: Robert Varga <rovarga@cisco.com>