Attempt at PartitionedGuidedImprovementAlgorithm.

In this implementation, the search space is split into separate and
independent partitions, based on the first Pareto point found.

This implementation works for any number of objectives. Single-objective
problems are special-cased, since partitioning doesn't make sense.

Tasks are submitted to a threadpool only if its dependencies have
completed. The search space is only split on the first Pareto point; the
subtasks will not recursively split their partitions.
Clean up whitespace
Clarify comments about mapping bitset bits to metrics, and iterating over objectives.
Rename PartitionedSearcher to PartitionSearcherTask. Change from Callable<Formula> to Runnable
Use a CountDownLatch to wait for tasks to complete, instead of blocking on a queue of futures
Consolidate both for loops in the linkDependencies method
Clean up some of the logging in PGIA
Merge branch 'master' into amalgam-partitioned-gia

Conflicts:
	src/kodkod/multiobjective/MultiObjectiveSolver.java
Throw an exception if the objectives aren't sorted

This is for the set of objectives in the partitionConstraints method,
since it requires the order to be deterministic. Sorting is a sufficient
(but not necessary) condition for this.
Remove unused import
Remove boundary finding from PGIA and fix some code review comments
Merge pull request #40 from TeamAmalgam/amalgam-partitioned-gia

Implement PartitionedGuidedImprovementAlgorithm