XD-1329 Add Kafka source module

- Add kafka source module with consumer configurations
- Add `spring-xd-extension-kafka` subproject
  - Add Kafka module options mixin and  source module options metadata

Fix code review comments
  - Add kakfa zkconnect chroot path for kafka zk namespace
     - Allow the `zkconnect` property be overridden via modules.yml/kafka.properties
  - Update javadoc for StringDecoder
  - Update kafka inbound channel adapter's poller interval to `100ms` and
    max-messages per poll to `-1` which is unlimited.

Add `encoding` module option for string ValueDecoder

- Use `util:properties` for consumer-properties
  - Add config/kafka-consumer.properties to externalize the properites

Add Kafka Message transformer
  - Message transformer that transforms the kafka messages into
Map<Integer,Object> where key is partition index and value is payload.
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
Added synchronization for container attributes

Changed ContainerAttributes internal map to ConcurrentHashMap
to take into account the possibility of multiple threads
reading & writing attributes.

When the admin port for a container is extracted from
an application context event, the port number will
be updated in the container's ephemeral node if the
node already exists. If the node does not exist, it
is assumed that the container is in the middle of
the registration process on another thread and therefore
the container attributes (including the management port)
will eventually be written to the container node.

The update to container attributes, check for node, and
update of node is now an atomic operation. Additionally,
the serialization of container attributes and subsequent
creation of the container node is also an atomic operation.
This guarantees that operations requiring read/write of
container attributes followed by a write to ZooKeeper
will happen on one thread at a time.

Improved assert message in functional test.
XD-2093,XD-2092,XD-2097 - Expose 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
- Fix review comments
  - use `ModuleType` and `DeploymentUnitStatus.State` in ModuleMetadata model
  - fix javadoc
  - Fix hasLength -> hasText
  - fine tune updateDeploymentStatus method
XD-721 Test Job Module addition after XD Start
Fix NPE at shell utils

 - Add null check on Table and UiUtils where the value properties are
evaluated.
XD-2105: Make SI property accessors available to bus partition selection
XD-2105 polishing
XD-2094 XD Cluster view

- Add `containers` tab
  - this renders the contents of `cluster/containers` REST endpoint
  - update the containers info with
     - groups
     - deployed modules
       - if the management port/jolokia are enabled, then deployed modules will also display message rates which can be configured via property in `routes.js` `$rootScope.enableMessageRates`
     - `shutdown` option if the management port is enabled
- Add tooltip on container and deployed modules values to display container and deployment properties respectively.
- Add confirm dialog for container shutdown
  - Disable shutdown action if management port is disabled
  - Align container id as plain text in the table
XD-2094 Add `xdPopover` Directive
Use strict REST domain objects

 - For `ModuleMetadataResource`'s module type and deployment status,
use `RESTModuleType` and `RESTDeploymentState` that represent the
module type and DeploymentUnitStatus.State.
XD-2095 WebUI: Support stream deployment props

- Add support to specify deployment properties when deploying stream
- Add a form that accepts text box for `deployment properties` and submit `deploy` action
XD-2169 - Create standalone list of deps for project

Switch from platform-managed dependency versions to a local file
compatible with the `versionManagement` mechanism of the Spring Boot
Gradle Plugin (initially, the file is a clone of the versions list
found in Spring IO 1.0.1.RELEASE).

This is necessary in order to allow the project's dependency list to
evolve independently from Spring IO (e.g. in order to upgrade Spring Boot).
XD-2146 Upgrade to 1.1.7.BUILD-SNAPSHOT
XD-1811 Custom module registry location

- In addition to `xd.module.home` and `classpath:/modules` as the default
module registry locations, an additional `xd.customModule.home` is provided
to let the user define any specific supported URL path for the module registry.
- Add an entry for `xd.customModule.home` in servers.yml so that user can
specify it.

Fix description not to use http:// location

Handle customModuleHome placeholder

 - Add `isActive()` to ModuleRegistry
 - Include only the active module registries to the DelegatingModuleRegistry
Comment out properties
Assign null default for custom module registry

 - Having `null` as the default value for custom resource module
registry will let us handle the look up methods return null/empty
values.
Remove redis/kryo stuff that is not used anymore
XD-2170: NoNodeException for job creation

When an admin process is elected leader/supervisor, it will query
the state of all streams and jobs. It does this by iterating all
streams under /xd/deployments/streams/[stream-name] and jobs under
/xd/deployments/jobs/[job-name]. Under each path, it is expecting a
modules node which contains all of the modules deployed for the stream or job.

The issue is that if *no* modules were deployed for the stream/job,
that node will not exist because it is created lazily by the container.
This is unlikely in the case of streams since a stream contains at
least two modules, but is much more likely with jobs since they
only contain one module.

The fix is to ensure that the
/xd/deployments/streams/[stream-name]/modules path (and the same for
jobs) is created upfront by the supervisor prior to creating the
module deployment requests. This will allow the supervisor to see
that no modules for the stream/job have been deployed and thus
take appropriate action.
XD-2119,XD-2143,XD-2144

* Add 'spring-boot-starter-security' as a dependency
* Set up the admininstration and management endpoints as insecure by default
* Unit tests for SSL
* Unit tests for security enablement

Disable AuditAutoConfiguration by default