WIP JIT: Carry optimizations!

***DON'T PUSH THIS PR PLEASE, COMEX***

Currently broken on a few things; I need to find the bugs (this PR isn't synced).

This PR depends on changes made in my integer optimizations PR, so until that's pushed, this will contain those in addition to the ones to be reviewed (the last 4 commits here). Please only look at those last 4!

These commits basically:

1.  Refactor the carry-affecting arithmetic ops to save ~130 lines of code and make the later patches easier.
2.  Add PPCAnalyst optimization for not calculating carry flags that won't be used (especially useful for srawix).
3.  Add the ability to keep carry flags in the x86 flags register between ops in the case that they're used in the next op, such as in super common idioms like subc/subfe and so on.

Seems to be ~9% faster overall in Pokemon Puzzle from a quick inaccurate benchmark. Probably a lot less in actual games, but I don't know.

TODO: add a PPCAnalyst reordering feature to reorder carry-using ops next to each other where possible?
Eh, I had actually meant doing the return directly like so:

```cpp
bool Jit64::CheckMergedBranch(int crf)
{
    const UGeckoInstruction& next = js.next_inst;
    return (((next.OPCD == 16 /* bcx */) ||
                ((next.OPCD == 19) && (next.SUBOP10 == 528) /* bcctrx */) ||
                ((next.OPCD == 19) && (next.SUBOP10 == 16) /* bclrx */)) &&
                 (next.BO & BO_DONT_DECREMENT_FLAG) &&
                !(next.BO & BO_DONT_CHECK_CONDITION) &&
                 (next.BI >> 2) == crf);
}
```