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 not crazy about the abbreviation in the map key. Would just "error" be sufficient? Alternatively, maybe we could generalize to "description" and even provide some info when in the incomplete state (not just failed state).