Add replication capability to Shard

This commit integrates the distributed data store with our Raft implementation.

Shard now extends RaftActor which provides it the replication capabilities required.

Other notable changes are,
- The FindPrimary algorithm has been changed to find the first replica for a shard.
  The shard then forwards requests to create a transaction or transaction chain to
  the leader
- Changed the package name for Raft internal messages from "internal" to "base" to be
  more BND tool friendly
- Fix some issues with Serialization of Raft messages
- Create a NoOpTransaction when no Primary can be found. The commit for this transaction
  will always fail. The NoOpTransaction returns absent for reads in all cases.
- Add PeerAddressResolution capability to Raft. What this basically does is given a static
  configuration where a shard has 'n' peers, you can pass the names of those peers
  to the shard and resolve their addresses at a later time. This allows the Shard to ensure
  consensus even in a situation where it is the first one to come up but it's peers are still
  not running

Change-Id: I3087deb5eb4418cd629a707ba14f43858db1f463
Signed-off-by: Moiz Raja <moraja@cisco.com>
Merge "Add replication capability to Shard"