FL-1364 refactor: ExpirationNoticed is an aggregate, one per wallet and window
The event was per lot, with a comment telling consumers they MUST glue events back together per wallet and window. That put the requirement in the wrong place: the notification service consumes events one at a time, so honouring it meant a buffer table and a flush cycle there — state and a schedule bought for nothing, plus the question of what happens when the flush is late and the points are already gone.
The producer is the only side that sees a whole window in one pass, so it aggregates: Amount is the combined remainder, Lots says how many lots it came from, ExpiresAt is the earliest of them (a countdown must never promise more time than the member has). LotID is gone — a notice covers several lots, so no single lot id belongs on it, and the dedup key is (WalletID, NoticeWindow) within the expiration date.
Free to change: nothing consumes this event yet (the NMS consumer is FL-1367).
Closes FL-1364