patch: Refactor to better support new kinds of patches.