Some of the logic for determining block behaviour should be moved to the block class. This includes:
- In PasswordReset::isBlocked, to decide whether to ignore a block, which relies on knowing the system block type. We need to be able to detect if a merged block is from multiple ignorable system blocks.
- In User::trackBlockWithCookie, to decide whether to track the block with a cookie. Blocks are tracked if the target is an IP or an IP range. We need to be able to recover the types of the original blocks from a merged block.
This will be particularly helpful for T206163 (enforcing multiple blocks at once), in which it may be necessary to determine whether any of the several blocks that apply to one IP behave in a particular way.