Placement Policy API

1. Added PlacementPolicy API. Only supporting DISTRIBUTED runnables for now.
2. Allocating Containers for one runnable instance at a time (for DISTRIBUTED runnables), instead of grouping them together based on Resource Specs. 
3. Added blacklist support for DISTRIBUTED PlacementPolicy. 
4. Moved Hosts and Racks from ResourceSpecs to PlacementPolicy.
5. Unit tests: Added PlacementPolicyTestRun Class.

Gourav
Better not to contains static states. Since it is only used for determine whether to log a warning message, it's better just to do it in the AMClient.