Making index writing pluggable.

There are two main pluggability points: (1) writing the index and (2) handling failure.
This provides the option to mix and match choices. For instance, it would be pretty easy to
write an AsyncHBase writer and use the standad KillServerOnFailurePolicy to ensure that
the server fails if all index writes don't succeed.

By default, we retain the existing behavior, which uses a thread-pool to write to a cache of HTables and kills the server if any write fails.