Wrapping exceptions correctly and ensuring Indexer not unloaded.

* Wrapping exceptions consistently to ensure that we correctly have a DoNotRetryIOException (see comments on IndexBuildingFailureException).
* wrapping all the calls in Indexer to rethrow exceptions back to the client such that the Indexer is not unloaded if it gets a RuntimeException (in practice, wrapping any non-IOException)