XD-2092 XD-2093 XD-2097 Expose detailed container/modules info from XD cluster

- XD-2093 Add deployment status to module metadata
  - ModuleMetadata will now have:
     - Unit (Stream/Job) name
     - Module name (module label + index)
     - Module type
     - Unit deployment status
- Update `ModuleMetadataResource` with the changes
- Add a method in `ModuleMetadataController` to update the
  deployment status for each stream/job module by referring
  to stream/job repositories
- Fix `runtime modules` command and add the above fields in the result
- Change `runtime modules` to `cluster modules`
- Fix the tests

Add `deploymentStatus` to ModuleMetadata
  - Previously it was updated with `ModuleMetadataResource`

XD-2092 Enhance container domain object

- Add `RuntimeContainer` that extends `Container` and also has:
  - DeploymentSize
  - DeployedModules
- Change `/runtime/containers` to `cluster/containers` and change the
REST endpoint to return the `DetailedContainer` objects
  - Update resource assembler and domain object to use `DetailedContainer`
- Update tests

XD-2097 Shutdown containers from admin

- Enable `shutdown` endpoint for containers
 - Keep the `mangementContextPath` the same for both admin/container
- ContainerRegistrar stores the container's port as container attribute
  - If the container uses local port `0` then the port is known only when
the `EmbeddedServletContainer` is initialized
    - Add `update` method in `ContainerRepository` to update the container data
    - Update container data (attributes) along with container port info
- Add REST endpoint that shuts down container by `containerId`
  - Get container host and port from container attributes
  - Use `RestTemplate` to send `POST` request to shutdown the container
  - Throw `NoSuchContainerException` if container is not found
  - Add test

Handle error scenarios
  - During `containerRepository.update` if the container path doesn't exist,
throw `NoSuchContainerException`
  - Add tests for `containerRepository.update` scenarios
  - Check `zkConnection` before calling `containerRepository.update`
  - Throw `ContainerShutdownException` when the response to shutdown container
results in exception

Use the management port
  - Use container server's `management` server port to access shutdown
endpoint.
    - Handle the `EmbeddedServletContainerInitializedEvent` when the event
comes out of management server's servlet container. The namespace for this
context is set to `management`. Hence using that to distinguish the event
       - Make sure the management port is always updated when the above
event is processed.
    - Update the container attributes with mangement port (if used)
before registering with ZK on the `ZKContainerConnectionListener`s
 onResume() and onConnect events

- Message rates from admin server

  - Access jolokia endpoints for deployed modules' message rates
from admin controller
     - This will allow us the client don't make direct connection
to the container
Understood - interesting conundrum though... on one side I don't tight coupling it creates but I am not a fan of plain strings, for something that only has  limited set of options :-(