XD-1270: Add states to the deployment of stream

Summary of changes:

1. `ModuleDeploymentWriter` now returns `ModuleDeploymentStatus` which encapsulates everything related to individual module state.
2. The `ModuleDeploymentStatus` objects are aggregated and passed into an implementation of new interface `DeploymentUnitStateCalculator` which calculates the state of the job/stream based on the individual module states.
3. Interface `DeploymentUnit` was introduced to cover the common attributes for streams and jobs.
4. The status for streams/jobs is written into ZK under `/xd/deployments/streams/<name>/status` and `/xd/deployments/jobs/<name>/status`, respectively.
5. As a result, modules for streams and jobs are now under `/xd/deployments/streams/<name>/modules` and `/xd/deployments/jobs/<name>/modules`, respectively.
6. The stream and job repositories have a new method `getDeploymentStatus` which may be invoked to obtain the state of a stream/job.
7. Stream and job states are recalculated when a container joins or leaves the cluster.
I'll do it like this:

```
String statusPath = Paths.build(Paths.JOB_DEPLOYMENTS, job.getName(), Paths.STATUS);
Stat stat = client.checkExists().forPath(statusPath);
if (stat != null) {
	logger.warn("Found unexpected path {}; stat: {}", statusPath, stat);
	client.delete().forPath(statusPath);
}
client.create().withMode(CreateMode.EPHEMERAL).forPath(statusPath,
		ZooKeeperUtils.mapToBytes(status.toMap()));
```