Hello Joel,
I haven't looked at these patches in detail, largely because there's still outstanding test failures, but I do have one high-level comment, which is that I'd recommend starting with the basic implementation (i.e. just the first four patches), and leave the rest for separate merge requests. Since merge requests can only be applied as a whole I think it makes sense to narrow this down to a more minimal set, and try to get one thing done at a time.