Massive modifications to SheetDataIndexers

1. Pulled out an interface for SheetDataIndexers.
2. Re-implemented the entire stack using a linked list.
3. Unit tests for that new stack.

This is a breaking change. All uses of SheetDataIndexer should be
replaced with ISheetDataIndexer.