Restructuring to remove code duplication between the two version override classes.

Duplicate code was moved mostly into VersionOverrider (renamed the previous abstract class and added methods).