Ensure that indexes are retained across reloads

The `service/equiv?` check for a wrapped index currently tries to compare the underlying index with a wrapped index and fails, causing the index to be swapped out.

This pull request introduces a `WrappedIndex` protocol to allow a wrapped index to have access to the underlying index of another.

I wasn't really clear what the idiomatic way to solve this was, so I just took a shot. Please let me know if there's a cleaner way to do this.

This fixes #405.