Extend Sunspot.remove! to accept a block, and enables .remove_by_id(!) to accept multiple ids as separate arguments or as an array of ids.

The most substantial supporting work was done in IdShardingSessionProxy, where we now issue up to one remove command per shard, rather than one command per id.