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'm being a bit paranoid here. In theory there should **never** be a pre existing node when we get to this phase. If there is, it means that a new leader was elected to be supervisor while another leader still has its ephemeral nodes around. 

Perhaps I should make this more clear in the code (and comments). I can log a warning if there's a node there and I delete it before creating this new one. I don't think it is required to wrap it in a multi op because the lack of data in this node is not a critical problem. I certainly can't invoke `setData` as this JVM *must* be the ephemeral node owner.