Indexing throughout the client.

And a bit of testing.
Indexes persist (serialize/deserialize).

- Added property so that IndexData instances serialize properly
- Added some glue for using indexes automatically
- Clients shutdown (dispose) to persist indexes