Issue #3616514: Settle the order balance in the notification handlers
The balance check that followed completing the payment could never be true. Payment::postSave() does not recalculate anything, it only registers the order with PaymentOrderUpdater, which settles total_paid in destruct() at the end of the request. The order still read as unpaid at that point, so the branch written to guarantee order.paid never ran.
That mattered because of the race it was meant to cover. While the customer confirms in the MB WAY app, the checkout request they left open still holds a copy of the order; whichever save loses is rejected with an OrderVersionMismatchException. When the loser was the deferred update, total_paid stayed at zero and the order kept a completed payment while reading as unpaid forever, with no order.paid event and no state transition.
Settle the balance synchronously inside the notification request instead, retrying on a version clash and logging an error when it cannot be settled, so an unsettled balance stops being silent. Both gateways share the logic through SettlesOrderBalanceTrait; Multibanco carried the same defect latently, its customers simply pay too late to collide with anything.
Closes #3616514