!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 
I did originally try a type safe approach, but it gave me a serialisation exception when trying to create the Shard, so I looked at how the rest of the cluster sharding was getting around it and saw it used the non type safe approach.

I couldn't figure out exactly why it was failing though, here is the exception;

```
java.lang.IllegalArgumentException: pre-creation serialization check failed at [akka://ClusterShardingSpec/user/counterRegion/1]
	at akka.actor.dungeon.Children$class.makeChild(Children.scala:194)
	at akka.actor.dungeon.Children$class.actorOf(Children.scala:38)
	at akka.actor.ActorCell.actorOf(ActorCell.scala:369)
	at akka.contrib.pattern.ShardRegion$$anonfun$getShard$1.apply(ClusterSharding.scala:892)
	at akka.contrib.pattern.ShardRegion$$anonfun$getShard$1.apply(ClusterSharding.scala:873)
	at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
	at scala.collection.AbstractMap.getOrElse(Map.scala:58)
	at akka.contrib.pattern.ShardRegion.getShard(ClusterSharding.scala:871)
	at akka.contrib.pattern.ShardRegion.receiveCoordinatorMessage(ClusterSharding.scala:730)
	...
Caused by: java.io.NotSerializableException: akka.contrib.pattern.ShardRegion
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
	at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply$mcV$sp(Serializer.scala:129)
	at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129)
	at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129)
	at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
	at akka.serialization.JavaSerializer.toBinary(Serializer.scala:129)
	at akka.serialization.Serialization$$anonfun$serialize$1.apply(Serialization.scala:90)
	at akka.serialization.Serialization$$anonfun$serialize$1.apply(Serialization.scala:90)
	at scala.util.Try$.apply(Try.scala:161)
	at akka.serialization.Serialization.serialize(Serialization.scala:90)
	at akka.actor.dungeon.Children$$anonfun$makeChild$2.apply(Children.scala:192)
	at akka.actor.dungeon.Children$$anonfun$makeChild$2.apply(Children.scala:190)
	at scala.collection.LinearSeqOptimized$class.forall(LinearSeqOptimized.scala:70)
	at scala.collection.immutable.List.forall(List.scala:84)
	at akka.actor.dungeon.Children$class.makeChild(Children.scala:190)
	... 20 more
```