Sharding

Horizontal partitioning, shard keys, rebalancing, and handling cross-shard queries.