Wrapping exceptions correctly and ensuring Indexer not unloaded.

Wrapping exceptions consistently to ensure that we correctly have a DoNotRetryIOException (see comments on IndexBuildingFailureException).
Further, 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)
Merge pull request #463 from jyates/wrap-and-throw-exceptions

Wrapping exceptions correctly and ensuring Indexer not unloaded.