Adding more threads per htable writer
Moving IndexBuilding to managing multiple update at once
Adding paralell builder to concurrently run index builds + threading fixes.

Moving building to an IndexBuildManager. This helps abstract some of the details of
building away from the Indexer. Also, means we can leak less of the details of the
implementation away (though not as many as I'd like)

Adding some more logging and interruptibility to acquiring the INDEX_UPDATE lock
to help minimize locking risks for server shutdown.
Abstracting TaskRunner logic.

Helps for testing and also later adding other TaskRunners

Additionally, formalizing Task/TaskBatch to support better failure policies.

This way we can tie all the elements of the batch together and let the tasks determine
if they want to fail together if another task fails in the same batch. We then also
update the batch failure when we find a single task failure in the QuickFailing
implementation.

Additionally, this supports more complex task runners, for instance the task runner
that would be needed for the TrackingParallelWriteIndexCommitter (not yet implemented
as it would just be too much in the same patch
Merge pull request #457 from jyates/add-multi-threading

Add multi threading to building and writing