Implement creating and applying of snapshot for a shard

This commit implements creating and applying of snapshot as per the
RaftActor contract.

There was an issue related to recovery which was occurring because Shard
was created without a schemaContext so there are changes in this commit
which ensure that the Shard is not created before a schemaContext is
received

Change-Id: I45fd64885f09fac57f1f5ff235144064b94ab129
Signed-off-by: Moiz Raja <moraja@cisco.com>