feat(*): generalise+add algebraic instances (#18947)
These are needed for #18857 (splitting field diamond), and I feel as though it's getting unwieldy so having these separately for review may be nice.
Co-authored-by: Eric Rodriguez <37984851+ericrbg@users.noreply.github.com>