DATACMNS-394 grid discovery spi

NOTE: PR to get visibility for this code and it needs a shared home outside of SHDP/XD.

Adding functionality on an interface level to do discovery of a grid,
handle node grouping and manage grouping.

- Interfaces are strongly typed order to have flexibility to extend
  framework interfaces and custom implementors to work around issues more easily.
- Multiple levels of interfaces: ContainerGrid, ContainerGridGroups and
  ManagedContainerGridGroups. These should be flexible enough to be used
  internally(grid will discover itself) or externally(data is fed in the
  system externally). Should also work in cases where grid nodes will
  discover itself without any central server(i.e. hazelcast), or having a central
  point of origin for discovery(Hadoop Yarn/Appmaster).
- ContainerNode and ContainerGroup is using typed identifier to work through
  not having a need to fix identifier as String or Object.
- From a framework point of view, all interfaces can be extended to
  create a totally extended discovery spi while other users are still able to
  understand what happens on a low level interfaces(what i.e.
  ContainerGrid, ContainerNode is giving out.

![grid-spi](https://f.cloud.github.com/assets/50398/1515989/7953a40c-4b0c-11e3-9694-015c65dec8fb.png)