refactoring solver code to be more generic with the introduction
of a ClusterLayoutChange, which can apply some sort of change
to a ClusterLayout. Currently only an AddServicesChange is
implemented, but we can add ones for removing a service or adding
nodes in the future. Also changing the solver interface a bit
to return a diff of cluster layout when adding services to an
existing layout.
More detailed javadoc.
Merge pull request #78 from continuuity/feature/change-solver-to-return-diff

refactoring solver code to be more generic with the introduction