Bounded GIA

Fixes #25.

This is a first step to a larger parallelization effort. First, we have to find all the boundaries of the problem (ie with two objectives, we draw a "rectangle").

This is the basic algorithm:
* Throw a dart to get a solution
* Get the values of that solution
* For each objective, use a GIA-like approach (with an incremental solver) to work your way up to the boundary
* Now AND the boundaries with the problem constraints in the regular GIA

The boundary finding is multithreaded. A thread pool is created with `min(user value, number of cores, number of objectives)` threads. The `user value` is currently hard-coded to 8; #30 aims to resolve this.

The thread pool is managed by an `ExecutorCompletionService`. Tasks are added to its work queue in the form of `Callable<T>` objects. (A `Callable<T>` is like a `Runnable` but it returns a result of type `T`.) Solutions are packaged as `Future`s and then added to a blocking queue. Thus, the algorithm thread (recall the algorithm thread is separate from the main thread) blocks until all results are available.

I'd like to merge this into master now, even though there's still a lot of related work left. I would rather send a pull request for a smallish self-contained change, rather than some enormous pull request.

Note also that this (currently) hard-codes the algorithm to PartitionedGIA; #17 is supposed to resolve this.

Reviewers: @AtulanZaman @cpkleynhans @joseph2625