Changeset cache refactor

There's still refactoring work to be done, but this should stop the changeset cache from blocking my progress