Use `eachById` in `mailbox:clean`
I added mailbox:clean to an application that has been using this package for several years, and noticed that older emails weren't being cleared out unless I ran the command multiple times.
Reading the command, I noticed it used chunk when deleting records. The problem with chunk in this context is that it uses offset/limit pagination under the hood. As rows are deleted in each chunk, the remaining rows shift, causing the next chunk to skip some records. This results in incomplete deletions unless the command is repeatedly executed.
To verify the issue, I modified CleanEmailsTest to create 200 records instead of 60, which caused the test to fail due to records being skipped.
To fix this, the command now uses eachById, which paginates based on primary key rather than offset. This avoids skipping rows during deletion, since it always continues from the last seen ID, not a shifting offset.