### Description
This PR fixes a bug in the MessageSyncCursor rewind logic that causes
the cursor to get stuck.
The cursor would look for the message with nonce `n`, find it, and move
its `next_block` to the block `b_n` at which `n` was dispatched.
It would then index starting at `b_n`, find `n` again, interpret that as
a "discontinuity", and rewind back to `b_n`, getting itself stuck
permanently.
We *should* be moving to `b_n` and not e.g. `b_n + 1` because we have no
guarantee that `n+1` was not also present in `b_n` but just dropped by a
flaky `eth_getLogs` implementation.
The fix is to only consider messages with nonce > `n` when looking for
discontinuities when our target nonce is `n + 1`.
### Drive-by changes
- Modifies the E2E tests to use a chunk size of 1, allowing us to
reproduce this failure mode without the filtering fix.
- Debug log on rewind
- Comments to clarify fast forward logic