[refactor] refactor how to do kvstore migration
Changing how the code migrates the kvstore from version to version of a live chain, while not requiring collaboration and communication between the nodes.
here we are switching to an active migration process, rather than passive. Previously, the plan was to upgrade data in the kvstore as we read it, wherein an active model, when the kvstore switches to a new store, the entire store is updated to the new version. There are pros and cons to both of these approaches. But having an active model is easier to test, and have more confidence that it works appropriately. Passively has a considerable amount of ambiguity. But the amount of time an active model can take to upgrade is relative to how many items in the kvstore there are. Over time, that can become considerably large and cause the chain to be down for hours, or even days.