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
This would never be null as it will at least be empty list if there are no modules deployed in the container.