!con #15496 Make entries of shards persistent

- Move all entry related logic out of the ShardRegion and into a
  new dedicated child `Shard` actor.
- Shard actor persists entry started and passivated messages.
- Non passivated entries get restarted on termination.
- Shard Coordinator restarts shards on other regions upon region failure or handoff
- Ensures shard rebalance restarts shards.

Refs #15496 
When recovering or rebalancing the ShardCoordinator will send itself a `ShardHome` inside of  `allocateShardHomes` for each shard still needing a new home.

The other option to this is to move all code under the `case GetShardHome(shard) ⇒` into a new function, and call that directly inside `allocateShardHomes`. I believed the code was cleaner by simply leaving the code where it was, and sending self ShardHome messages. If you believe it would be better separated, let me know and I'll modify it accordingly.