Keep DataChange registrations and notifications local

Here is how it works
--------------------
When a consumer registers for a datachange notification we first check if the Shard
to which this registration needs to be sent is local. If it is then we send the
registration to it. If it is not then we simply return a NoOpRegistration to the consumer.
This ensures that a DataChange registration stays local to a cluster member.

Now let's say we have 3 replicas and in all those replicas we do find a local shard for a
given module and we have 3 listener registrations. At this time we do not want all 3 members
to be notified of the change. We only want the node which is the Leader to notify it's listeners
of the change. To restrict that the DataChangeListener will only forward events to the listener
if the Shard sends it a message enabling notifications

Change-Id: I035bbdf34e2509047f4bcb475c443a761b08e68d
Signed-off-by: Moiz Raja <moraja@cisco.com>
Return a NoOpTransactionContext when the Primary for a shard is not found

A NoOpTransactionContext is returned when a request to create a transaction
results in the primary not being found or when the request times out.

A CanCommit on the NoOpTransaction will always false. A read
will always return an empty result. The consumer will need to deal with this situation.

Change-Id: Id6f7d0688921acac718b9bb06fbf03d5e345d7ac
Signed-off-by: Moiz Raja <moraja@cisco.com>
BUG 1162 - ensure data for all path arguments in datastore.

Fixes
1) It is possible to specify path to data (including lists with
keys) via unexisting nodes and store payload data to this path.
Missing nodes in datastore are created before storing payload data.
2) InstanceIdentifier is now correctly created via
DataNormalizer.toNormalized()

Change-Id: If795a930015fef39a0029e808355d51357e2d5d5
Signed-off-by: Jozef Gloncak <jgloncak@cisco.com>
Merge "BUG 1162 - ensure data for all path arguments in datastore."