Add cleanup behavior and cleanup tests for sort-based shuffle

This also required creating a BlockId subclass for shuffle index blocks
so that the BlockManagers can report back their lists of blocks.