Update refresh plugin logic for 7.0 architecture

The previous implementation did not have tests, I will be adding some later. For now, I'm looking for feedback on the basic approach. Is this what the `force` option for plugin running is designed for? Any other concerns?

/cc @sersut @mcquin